如何确保我的2D侧卷轴相机处于世界范围内?

我已经尝试在XNA中实现一个基本的2D sidescroller相机,但我不希望它能够滚过我的瓷砖地图的边缘!

我试图修复它,但是当我左侧工作,右侧停止工作…

我该如何解决这个问题?

编辑:安科之后

public Matrix transform; Viewport view; Vector2 center; public void Update(GameTime gameTime, Player player) { center = new Vector2(player.Position.X + (player.Bounds.Width / 2) - (960 / 2), 0); float cameraX = center.X; float cameraWidth = view.Width; float worldWidth = 1760; if (cameraX < 0) cameraX = 0; else if ( cameraX + cameraWidth > worldWidth) cameraX = worldWidth - cameraWidth; transform = Matrix.CreateTranslation(new Vector3(-cameraX, 0, 0)); 

我们来画吧! ( 再次 ; 3)

游戏世界,与相机

想象一下,所有的草地和skyey位是你的游戏世界。 那个以红色框起来的浅色矩形就是相机正在看的区域。 玩家只能真正看到相机里的东西。 我们希望相机始终保持在游戏世界。

(x,y)是相机的位置
wh是相机的宽度和高度

让我们也说你的游戏世界有宽度world_w和高度world_h

为了照顾左边,我们要确保x > 0
为了照顾正确,我们要确保x + w < world_w

要照顾最高层,我们要确保y > 0
为了照顾底部,我们要确保y + h < world_h

因此,在应用一个变换matrix来转换x, y ,检查我们的假设是否属实,如果不是的话,纠正它们,所以它们只是:

 if x < 0 then x = 0 elseif x + w > world_w x = world_w - w if y < 0 then y = 0 elseif y + h > world_h y = world_h - h 

没有更多的逃脱相机!

请注意,如果您的世界比您的相机小,您可能想要构建一个特殊情况来检测游戏中是否会出现如此小的世界。