【问题标题】:Collision for a Static Wall静态墙的碰撞
【发布时间】:2014-02-04 02:52:17
【问题描述】:

我必须为大学编写一个游戏,我试图让一堵静态墙成为玩家的障碍,这样玩家就无法穿过它。

            if (rectangle1.Right == (wallRect.Left) && rectangle1.Bottom >= wallRect.Top && rectangle1.Top <= wallRect.Bottom)
        {
            rightMovement = false;
        }
        else
        {
            rightMovement = true;
        }

下面是控制输入的代码。

        if (rightMovement == true)
        {
            if (currentKeyboardState.IsKeyDown(Keys.Right) || currentGamePadState.DPad.Right == ButtonState.Pressed)
            {
                player1.Position.X += playerMoveSpeed;
            }
        }

目前,如果我从屏幕左侧开始并进入墙壁,碰撞工作正常,然后当我移动到墙壁的另一侧时,碰撞不起作用,然后当我移动到右侧时屏幕边缘和移动到墙的碰撞在墙的右侧起作用,但随后我可以穿过墙的左侧。我已经编写了左右墙壁碰撞的代码。

【问题讨论】:

  • 您应该使用Rectangle 表示您的墙和玩家边界,如果他们使用Intersects(),则采取相应的行动。见msdn.microsoft.com/en-us/library/…。额外提示:当您的播放器每帧移动的像素多于墙的宽度时,它将穿过它:您可能希望查看连续碰撞检测。

标签: c# xna collision


【解决方案1】:

1) 定义 8 个顶点,其中 4 个在玩家边界矩形原始位置的坐标处,4 个用于新位置。 2) 定义由这些顶点构成的所有可能的三角形。 3)如果其中一个三角形与墙的一个边缘相交,则它们在此框架中发生碰撞。 4)通过获取交叉点的最小和最大位置,您可以知道碰撞的坐标。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2023-03-25
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多