XNA 2D平台 - 重力导致精灵沉入平铺

时间:2014-01-03 06:07:12

标签: xna state collision detection tile

我在XNA中创建了一个2D平台游戏,我在重力方面遇到了一些问题。我的引力导致玩家陷入瓦片,而不是落在上面。这是我的重力实施:

        if (willPlayerCollide(State.Decending) == false)
        {
            changeState(State.Decending);

            onGround = false;
            velocity.Y += 0.1f;
            position.Y += velocity.Y;

            positionRect = new Rectangle((int)position.X, (int)position.Y, spriteWidth, spriteHeight);
            futurePositionRec = new Rectangle((int)position.X, (int)position.Y + 1, spriteWidth, spriteHeight);

            debug = velocity.Y.ToString();

        }
        else
        {
            changeState(State.Idle);
            onGround = true;
            velocity.Y = 0.0f;
        }

willPlayerCollide的碰撞检测代码的相关部分是:

        else if (potentialState == State.Decending)
        {
            futurePositionRec = new Rectangle((int)position.X, (int)position.Y + 1, spriteWidth, spriteHeight);

            for (int i = 0; i < Level.impassableTileRecs.Count(); i++)
            {
                if (futurePositionRec.Intersects(Level.impassableTileRecs[i]))
                {
                    collided = true;
                    tileCollRect = Level.impassableTileRecs[i];
                }
            }
        }

使用此代码,当玩家摔倒时,它会部分沉入地块。取决于velocity.Y增加的数量有多大,玩家将沉入地下多少。大的加速度将导致玩家进一步下沉到平铺中。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为你只改变了精灵的速度,当它撞到地面时它的Y位置就会被保留。发生地面碰撞时将其设置为tileCollRect.Y - spriteHeight可以解决问题。