我在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增加的数量有多大,玩家将沉入地下多少。大的加速度将导致玩家进一步下沉到平铺中。任何帮助表示赞赏。
答案 0 :(得分:0)
之所以发生这种情况,是因为你只改变了精灵的速度,当它撞到地面时它的Y位置就会被保留。发生地面碰撞时将其设置为tileCollRect.Y - spriteHeight
可以解决问题。