gpt4 book ai didi

C# XNA 2D 平台跳跃逻辑

转载 作者:行者123 更新时间:2023-11-30 13:27:01 24 4
gpt4 key购买 nike

我正在研究 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;

如果您使用此代码向上射击一个物体,您可以获得(非常)真实的轨迹。这是跳跃的良好起点。

开始跳跃的最简单方法是在按下跳跃键时增加一些向上的速度。上面的代码将使角色恢复原状。

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

关于C# XNA 2D 平台跳跃逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com