在xna上坠落和碰撞

时间:2011-12-24 05:36:57

标签: c# xna collision gravity

我正在制作平台类型的游戏。我使用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;
            }

2 个答案:

答案 0 :(得分:3)

当你遇到一个十字路口时,你的问题很可能是你没有突破循环。你每次循环遍历所有平台,所以当一个平台相交时,重力将= 0然后猜测是什么,它将检查下一个,重力将再次为5。

您必须重新构建循环,或者您可以查看这个2D物理引擎来处理大部分内容:

http://farseerphysics.codeplex.com/

答案 1 :(得分:0)

微软有一个Platformer sample,它已经堕落和碰撞。这是一个值得学习的好例子,你不需要任何第三方物理引擎来为你做这件事。

相关问题