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

本文关键字:非线性 边界 设置 2D 游戏 | 更新日期: 2023-09-27 18:26:59

通常要在某个区域设置边界,我会实现以下内容:

if(player.X > 400){
   player.X = 400;
}

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

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

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

无论如何,我建议使用线性方程和MathHelper.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)

您需要实现玩家对任意行的碰撞。如果不了解你的球员和/或其他选择,就不可能提供更多帮助。例如,为什么不使用现有的物理引擎?

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

对于基于瓦片的游戏,在玩家移动之前更容易阻止玩家移动。例如,如果玩家即将进入界外的瓷砖,只需禁止移动即可。