【问题标题】:setting non-linear boundary in 2D game在 2D 游戏中设置非线性边界
【发布时间】:2012-03-25 05:05:02
【问题描述】:

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

if(player.X > 400){

   player.X = 400;

}

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

【问题讨论】:

    标签: c# xna boundary


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        希望我能回答您的问题,而不是对您要达到的目标做出假设并建议使用物理引擎。

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

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

        所以现在你可以得到你的 Player 的 y 值的 x 边界

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-05
          • 1970-01-01
          • 2012-03-31
          • 2014-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多