我一直在用 C# 构建一个游戏引擎,使用 XNA 作为我第一次涉足编程,我想用它来更全面地理解我需要知道如何解决的问题。
我目前正在研究的引擎部分是碰撞检测。我正在研究的模式是基于图像的主动碰撞系统。
角色有一个位置(XNA Rectangle),背景是2个纹理,角色有一个Vector2运动属性。一个是显示纹理,另一个是第一个纹理中碰撞区域的两色图。我显示纹理 1,并在加载背景时使用纹理的 GetData 例程将纹理 2 加载到 Color[] 数组中。输入解析例程不会直接更改位置,它会添加到运动属性中。
因此,每次更新:检查输入解析器,并添加到运动 Vector2。将玩家的 position.X/Y 沿每个表面的 position.Width/Height 与运动的方向进行比较。如果运动会将其带到碰撞区域(通过与 Color[] 数组的比较检测到),则运动将归零(重力子程序除外),并且在该特定方向上不会进行任何运动。
这让我不会停止所有的运动,就像在超级马里奥这样的游戏中,跳到一个街区的一侧不会结束你的 Y 轴运动。
现在,我的问题(那个描述很快就失控了)......
我应该如何处理不同的分辨率?我不明白如何缩放图像以填充所需区域,然后将其设置为可用于提取 GetData 的格式?我不想让游戏为每种分辨率加载不同的背景碰撞检测器。我觉得这是一份编码工作,而不是艺术/设计工作。