游戏中的跳跃效果

时间:2012-02-23 02:33:06

标签: xna

我目前正在尝试使用XNA创建一个基本的平台游戏,我想知道如何创建一个跳跃效果。"我目前有基本的键盘输入,允许侧向移动,但我希望我的精灵慢慢地进入跳跃而不是立即传送到那里(现在我有像Rectangle.Y + = 40每次我跳跃,制作精灵立即出现在那里)。有没有人有任何见解?

4 个答案:

答案 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;

恭喜你,你成功了。