繁体   English   中英

C#XNA 2D平台跳跃逻辑

[英]C# XNA 2D Platformer Jumping Logic

我正在研究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并且永远不会停止。 我在这做错了什么? 这只是完全错误的方法吗?

我完全错了,我很害怕。 你知道位置速度加速度吗?

速度是一种随时间变化的位置。 加速度是速度随时间的变化。 重力是一种向下的加速度,因此随着它们的下降,事物会变得更快。

以下是一些可能有助于说明这一概念的代码:

Vector2 position;
Vector2 velocity;
readonly Vector2 gravity = new Vector2(0, -9.8f);

// Update:
float time = (float)GameTime.ElapsedGameTime.TotalSeconds;
velocity += gravity * time;
position += velocity * time;

如果使用此代码向上拍摄物体,则可以获得(非常多)逼真的轨迹。 这是跳跃的良好起点。

启动跳转的最简单方法是在按下跳转键时添加一些向上的速度。 上面的代码将使角色退缩。

然而值得注意的是,优秀的平台游戏者采用了很多技巧来让跳跃感觉更好。 最特别的是,跳跃的高度可以通过按下跳跃按钮多长来调节。 通过让玩家立即开始向下移动来使这种感觉响应很重要。 快速执行此操作的方法是将速度设置为零,并在玩家向下移动时施加额外的重力。 但这确实是你必须调整的东西。

你用什么来进行碰撞检测/响应? 这会影响它。 但是,至少需要速度和位置。 一个例子可能是:

class Player 
{
    Vector2 Position;
    Vector2 Velocity;
}

// in the constructor:

Position = new Vector2 (YOUR POSITION HERE);
Velocity = Vector2.Zero;

然后在每个时间步骤中添加Velocity to Position (制作一个Player.Update()方法并从默认的Update方法中调用它)。 然后,当您想要移动时,每次都会添加到Velocity 例如,每当按下右键时检测,并向VelocityX部分添加0.5f 对左键执行相反(减去),并向上和向下修改Y 这将产生滑动效果,就像在冰上一样。 对于重力,只需在每个步骤中向Y部分添加少量,以使玩家“摔倒”。

为了让玩家跳跃(简单的方法),只要按下空格,只需将Y速度设置为-5或者其他东西。 角色会向上移动,并最终因为你之前提到的“引力”而倒下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM