我正在开发一个 2D 平台游戏作为学习实验,目前在跳跃逻辑方面遇到了一些问题。我知道重力应该应用到玩家身上,这会影响跳跃和下降的过程。这是我目前实现它的方式。
isJumping
只是bool
我用来知道玩家应该向上还是向下以及他们当前是否处于中间跳跃状态,因此他们不会再次跳跃。
spriteJumpPosition
是我用来限制玩家跳多高的值(默认为 0,上限为 10 是硬编码的)。
void UpdateGravity()
{
// Check if player is currently jumping
if (isJumping == true)
{
if (spriteJumpPosition < 10)
{
spritePosition.Y += (float)gravity;
spriteJumpPosition += gravity;
}
else if ( spriteJumpPosition >= 10 )
{
isJumping = false;
spritePosition.Y -= (float)gravity;
spriteJumpPosition -= gravity;
}
}
else if ( isJumping == false )
{
if (spriteJumpPosition > 0)
{
spriteJumpPosition -= (int)gravity;
spritePosition.Y -= (float)gravity;
}
}
}
使用上面的代码,当前的行为是玩家向下移动一点(可能是 2-3 帧)然后开始向上移动,isJumping = false
并且永远不会停止。我在这里做错了什么?这只是完全错误的方法吗?