0

我一直在用 C# 构建一个游戏引擎,使用 XNA 作为我第一次涉足编程,我想用它来更全面地理解我需要知道如何解决的问题。

我目前正在研究的引擎部分是碰撞检测。我正在研究的模式是基于图像的主动碰撞系统。

角色有一个位置(XNA Rectangle),背景是2个纹理,角色有一个Vector2运动属性。一个是显示纹理,另一个是第一个纹理中碰撞区域的两色图。我显示纹理 1,并在加载背景时使用纹理的 GetData 例程将纹理 2 加载到 Color[] 数组中。输入解析例程不会直接更改位置,它会添加到运动属性中。

因此,每次更新:检查输入解析器,并添加到运动 Vector2。将玩家的 position.X/Y 沿每个表面的 position.Width/Height 与运动的方向进行比较。如果运动会将其带到碰​​撞区域(通过与 Color[] 数组的比较检测到),则运动将归零(重力子程序除外),并且在该特定方向上不会进行任何运动。

这让我不会停止所有的运动,就像在超级马里奥这样的游戏中,跳到一个街区的一侧不会结束你的 Y 轴运动。

现在,我的问题(那个描述很快就失控了)......

我应该如何处理不同的分辨率?我不明白如何缩放图像以填充所需区域,然后将其设置为可用于提取 GetData 的格式?我不想让游戏为每种分辨率加载不同的背景碰撞检测器。我觉得这是一份编码工作,而不是艺术/设计工作。

4

1 回答 1

1

使用比例方法...

假设您的背景纹理具有大小(Wbk,Hbk),并且您将其绘制到具有大小(Wvp,Hvp)和偏移量(Xvp,Yvp)的视口。

视口是屏幕内的一个矩形,您可以在其中绘制背景。

现在你想在你绘制精灵的屏幕位置(Xs,Ys)的背景纹理中获得正确的坐标(Xc,Yc)......

然后,您需要计算背景纹理大小乘以相对于视口的坐标除以视口大小。

   Xc= Wbk * (Xs-Xvp)/Wvp;
   Yc= Hbk * (Ys-Yvp)/Hvp;
于 2012-07-26T08:01:57.767 回答