在2D游戏中设置非线性边界

时间:2012-03-07 16:29:28

标签: c# xna boundary

通常要在某个区域设置边界,我会实现类似的东西:

if(player.X > 400){

   player.X = 400;

}

这就好像在X = 400处有一条垂直线,阻挡了超出该范围的移动。我想知道如何在边界处实现倾斜或对角线而不是垂直/水平的区域。

3 个答案:

答案 0 :(得分:3)

希望我回答你的问题,而不是假设你想要实现什么,并建议一个物理引擎。

无论如何,我建议使用line equationMathHelper.Clamp函数

y = mX + b; // Line equation
x = (y - b) / m

所以现在你可以获得你的玩家的y值的x边界

MathHelper.Clamp(Player.X, min, (Player.Y - b) / m) 

或者来自你玩家的y值的x边界

MathHelper.Clamp(Player.Y, min, (m * Player.X) + b)

答案 1 :(得分:1)

您需要实现播放器与任意线条的碰撞。如果不了解您的播放器和/或其他选择,就无法提供更多帮助。例如,为什么不使用现有的物理引擎?

答案 2 :(得分:1)

我会说这取决于你想要做什么以及你的游戏类型。对于动态游戏,我建议使用您选择的物理引擎(2D或3D)并添加一些定义边界的静态形状。

对于基于磁贴的游戏,在移动之前阻止玩家移动更容易。例如,如果玩家即将进入区域,则只需禁止移动。