0

我正在制作平台类型的游戏。我使用 Rectangle 类和平台使我的主角成为一个矩形。平台在屏幕上不断向上移动,当我的角色与平台顶部碰撞时,我希望他着陆并以与平台相同的速度移动,否则,他应该是在下降。除了坠落的部分,我得到了一切工作。如果我打开下降,它永远不会停留在平台上,但如果我打开下降,它工作正常。基本上假设角色一直在下落,除非它降落在平台上,那么它的 y 方向/速度应该改变为平台的方向。

这是代码的那部分,关于如何在不与平台发生碰撞时使角色跌落的任何帮助都会很棒。我知道我在做什么可能不是最有效的方法,如果有更好的方法我很想知道。我是 xna 的新手,但我知道 java/c#

            Rectangle playerRec = new Rectangle((int)player.position.X, (int)player.position.Y,player.width, player.height);
        foreach (Platforms platform in platforms)
        {
            Rectangle platformRec = new Rectangle((int)platform.position.X, (int)platform.position.Y, platform.width, platform.height);
            if ((playerRec.Intersects(platformRec) && (playerRec.Y + playerRec.Height) - platformSpeed < platformRec.Y) &&
                (playerRec.X < platformRec.X + platformRec.Width && playerRec.X + playerRec.Width > platformRec.X))
            {
                gravity = 0;
                player.position.Y -= platformSpeed;

            }
            else if(player.position.Y != platform.position.Y)
            {
                gravity = 5;
                //player.position.Y += gravity;
            }
4

2 回答 2

3

您的问题很可能是您在遇到交叉路口时没有脱离循环。您每次都在遍历所有平台,因此当一个相交时,重力将 = 0,但猜猜看,它将检查下一个平台,重力将再次为 5。

你必须重组你的循环,或者你可以查看这个 2D 物理引擎来为你处理大部分这些东西:

http://farseerphysics.codeplex.com/

于 2011-12-24T06:18:06.083 回答
0

Microsoft 有一个Platformer 示例,其中包含坠落和碰撞。这是一个很好的学习示例,您不需要任何第三方物理引擎来为您执行此操作。

于 2011-12-24T06:43:02.247 回答