【问题标题】:simple 2d collision in monogame (using xna pipeline)monogame 中的简单 2d 碰撞(使用 xna 管道)
【发布时间】:2015-03-03 20:45:33
【问题描述】:

我刚刚开始学习单人游戏,我正在使用 XNA 管道(搜索 RBWhitiker)来创建一个 2d 平台游戏,但是当我试图让我的玩家跳上一个平台时我遇到了困难。

我的播放器可以跑过平台并跳跃,这是理想的。

问题在于,当玩家跳上平台时,他有点“锁定”到他在进入平台相同 x 坐标时所处的最后一个 y 位置,因此只是漂浮在平台上方的半空中。

另一个问题是玩家在平台上也不能跳跃。

希望这听起来不会太令人困惑,但我们将不胜感激!

Player.cs - 跳跃代码

        if (Keyboard.GetState().IsKeyDown(Keys.Up) && isJumping == false)
        {
            position.Y -= 30;
            velocity.Y = -7f;
            isJumping = true;
            isOnFloor = false;
        }

        if (isJumping == true)
        {
            velocity.Y += 0.4f;
        }

        if (position.Y >= 480)
        {
            isJumping = false;
            isOnFloor = true;
        }

        if (position.Y < 480)
        {
            isOnFloor = false; 
        }

        if (isJumping == false)
        {
            velocity.Y = 0f;
        }

Game.cs - HandleCollisions 函数,在 Update() 中调用

    private void HandleCollisions()
    {
        if (myPlayer.boundingBox.Intersects(myPlatform.boundingBox))
        {
            myPlayer.velocity.Y = 0f;
            myPlayer.isOnFloor = false;
        }
    }

https://www.youtube.com/watch?v=4Qks0VNpHCQ

这里有一个视频可以更好地说明我的问题。 几点:

  • 我知道,图片来自 broforce,这只是一个示例精灵,稍后会更改

  • 在角色仍然漂浮在平台上方的最后,我按了多次跳跃,但玩家没有跳跃

【问题讨论】:

  • 你能告诉我当他被卡住时玩家的位置是什么吗?
  • 这完全取决于您尝试跳上平台时的高度,即 430 和地板 (480) 之间的任何位置。如果有帮助,我可以链接一个视频来正确描述正在发生的事情?
  • 如果您愿意,可以。当浮动和无法跳跃发生时,我真的很想知道玩家的确切位置(X 和 Y 值),以便我可以逐步执行逻辑。您可以设置断点,或者只是在游戏运行时连续打印值。
  • 我认为仅仅知道边界框是否相交是不够的。您还需要计算盒子之间的距离以及玩家在哪一侧。然后你需要计算碰撞后玩家应该在哪里。正如您已经体验过的那样,这种代码很难调试。添加一些日志记录应该会有所帮助。另外,考虑将 Player.cs 中的一些代码移动到 HandleCollisions。大部分代码可能不是玩家关心的问题,将其移出将更容易推理恕我直言。
  • 我添加了一个视频来更好地说明我遇到的问题,非常感谢您的回复。

标签: c# collision detection monogame


【解决方案1】:

已解决:原来问题不是碰撞,而是 if 语句内部发生的问题 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多