我目前正在尝试使用XNA创建一个基本的平台游戏,我想知道如何创建一个跳跃效果。"我目前有基本的键盘输入,允许侧向移动,但我希望我的精灵慢慢地进入跳跃而不是立即传送到那里(现在我有像Rectangle.Y + = 40每次我跳跃,制作精灵立即出现在那里)。有没有人有任何见解?
答案 0 :(得分:0)
你最终会想要为你的游戏增加引力和可能的其他力量,所以我强烈建议你为自己省去很多痛苦并实施某种基本的力量系统。这可以使用Vector2
来完成,因为您可以将它们添加到角色的速度中。然后只需对你的角色施加一个瞬间的力量来推动它。
如果你真的不想使用物理引擎,你可以使用Vector2
和字符Y
的跳跃高点制作X
,然后使用Vector2.Lerp
方法在字符位置和跳转结束点之间进行插值。
这通常是一个非常糟糕的系统,我强烈建议您使用现有的物理引擎,或者制作一个简单的物理引擎。
答案 1 :(得分:0)
我并不完全了解如何在XNA / C#中实现这一点,但在Flash游戏中,我只是添加了一个垂直速度属性。我会尝试用C#写一切......
实施例;创建velocity属性:
float verticalVelocity = 0;
垂直速度应不断降低(通过重力)。在您的播放器可以访问的位置设置重力属性:
float Gravity = 2.5;
在播放器的update()
方法中,verticalVelocity
增加Gravity
。同时按Y
增加播放器的verticalVelocity
位置。这将模拟下降:
verticalVelocity += Gravity;
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings
当您击中曲面时,速度应重置为0.
最后,要跳转,只需从verticalVelocity
中减去给定值:
public void Jump(float height)
{
// Only jump if standing on a surface.
if(verticalVelocity == 0)
verticalVelocity -= height;
}
答案 2 :(得分:0)
使用sinusoid
代码应如下所示:
float ground = 0.0f;
float angle = 330.0f;
jump(){
if(ground == 0.0f)ground = Rectangle.Y;
if(Rectangle.Y <= ground)
{
Rectangle.Y+=Math.Sin(angle/(Math.Pi*180));
angle++;
}
}
答案 3 :(得分:0)
如果您动态修改ySpeed,则可以准确地创建重力效果,而不是仅添加40。
您想声明一个ySpeed
ySpeed = 0;
然后你想使用加速变量
acceleration = 0.25;
好的,既然我们已经这样做了,那么只要我们的玩家没有碰到地板,我们就加重力。
if(playerLocationY + playerHeight > floorLocationY)
{
gravity = false;
}
else
{
gravity = true;
}
if(gravity)
{
ySpeed += acceleration;
}
既然我们已经解决了这个问题,我们想要包含允许我们跳跃的东西。
if(KeyPressed == UP)
{
ySpeed -= acceleration;
}
这将使我们的玩家向上移动
我们现在想确保实际移动,所以让我们添加最后一行,然后我们就完成了。
playerLocationY += ySpeed;
恭喜你,你成功了。