C# 使用不同屏幕分辨率和图像拉伸处理基于背景的每像素冲突

C# 使用不同屏幕分辨率和图像拉伸处理基于背景的每像素冲突,c#,image,image-processing,xna,collision-detection,C#,Image,Image Processing,Xna,Collision Detection,我一直在用C#构建一个游戏引擎,使用XNA作为我的第一次编程尝试,我想用它来更全面地理解我需要知道如何解决的问题 我目前正在处理的引擎部分是碰撞检测。我正在使用的模式是基于图像的主动碰撞系统 角色有一个位置(XNA矩形),背景是2个纹理,角色有一个Vector2运动属性。1是显示纹理,另一个是第一个纹理中碰撞区域的双色贴图。我显示纹理1,并在加载背景时使用纹理的GetData例程将纹理2加载到颜色[]数组中。输入解析例程不会直接更改位置,而是添加到运动属性中 因此,每次更新: 检查输入解析器,并

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

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

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

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

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

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


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

使用比例方法

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

视口是屏幕内绘制背景的矩形

现在,您希望获得屏幕位置(Xs,Ys)的正确坐标(Xc,Yc)内部背景纹理,您可以在其中绘制精灵

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

   Xc= Wbk * (Xs-Xvp)/Wvp;
   Yc= Hbk * (Ys-Yvp)/Hvp;