我正在研究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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,当前的行为是玩家向下移动一点(可能2-3帧)然后开始上升,isJumping = false
并且永远不会停止.我在这做错了什么?这只是完全错误的方法吗?
And*_*ell 12
我完全错了,我很害怕.你知道位置,速度和加速度吗?
速度是一种随时间变化的位置.加速度是速度随时间的变化.重力是一种向下的加速度,因此随着它们的下降,事物会变得更快.
以下是一些可能有助于说明这一概念的代码:
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;
Run Code Online (Sandbox Code Playgroud)
如果使用此代码向上拍摄物体,则可以获得(非常多)逼真的轨迹.这是跳跃的良好起点.
启动跳转的最简单方法是在按下跳转键时添加一些向上的速度.上面的代码将使角色退缩.
然而值得注意的是,优秀的平台游戏者采用了很多技巧来让跳跃感觉更好.最特别的是,跳跃的高度可以通过按下跳跃按钮多长来调节.通过让玩家立即开始向下移动来使这种感觉响应是很重要的.快速执行此操作的方法是将速度设置为零,并在玩家向下移动时施加额外的重力.但这确实是你必须调整的东西.
归档时间: |
|
查看次数: |
8071 次 |
最近记录: |