Xna 游戏中的跳跃效应

Xna 游戏中的跳跃效应,xna,Xna,我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许横向移动,但我希望我的精灵能够缓慢地进行跳跃,而不是瞬间传送到那里(现在我有一个类似矩形的东西。每次我跳的时候,Y+=40,使精灵立即出现在那里)。有人有什么见解吗?你最终会想在游戏中添加重力和其他可能的力,因此我强烈建议你省去很多麻烦,并实施一些基本的力系统。这可以使用Vector2s来完成,因为你可以将它们添加到角色的速度中。然后只需应用instantan向你的角色施加压力,使其向上 如果

我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许横向移动,但我希望我的精灵能够缓慢地进行跳跃,而不是瞬间传送到那里(现在我有一个类似矩形的东西。每次我跳的时候,Y+=40,使精灵立即出现在那里)。有人有什么见解吗?

你最终会想在游戏中添加重力和其他可能的力,因此我强烈建议你省去很多麻烦,并实施一些基本的力系统。这可以使用
Vector2
s来完成,因为你可以将它们添加到角色的速度中。然后只需应用instantan向你的角色施加压力,使其向上

如果您真的不想使用物理引擎,您可以使用
Y
和字符
X
的跳转高点生成
Vector2
,然后使用该方法在字符位置和跳转终点之间插值


这通常是一个非常糟糕的系统,我强烈建议你要么使用现有的物理引擎,要么制作自己的简单引擎。

你最终会想在游戏中添加重力和其他可能的力,所以我强烈建议你省去很多痛苦,实现一些基本的力系统。这可以通过使用
Vector2
s,因为您可以将它们添加到角色的速度中。然后对角色施加瞬时力,将其向上推

如果您真的不想使用物理引擎,您可以使用
Y
和字符
X
的跳转高点生成
Vector2
,然后使用该方法在字符位置和跳转终点之间插值


这通常是一个非常糟糕的系统,我强烈建议您要么使用现有的物理引擎,要么使用自己的简单引擎。

我不完全了解如何在XNA/C中实现这一点,但在我制作的Flash游戏中,我只是添加了一个垂直速度属性。我会尽可能将所有内容都写成C

示例;创建速度特性:

float verticalVelocity = 0;
垂直速度应不断降低(通过重力)。在玩家可以访问的地方设置重力属性:

float Gravity = 2.5;
在玩家的
update()
方法中,通过
Gravity
增加
verticalVelocity
。同时通过
verticalVelocity
增加玩家的
Y
位置。这将模拟坠落:

verticalVelocity += Gravity;
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings
当你撞到一个表面时,速度应该重置为0

最后,要跳转,只需从垂直延伸率中减去给定值即可:

public void Jump(float height)
{
    // Only jump if standing on a surface.
    if(verticalVelocity == 0)
        verticalVelocity -= height;
}

我并不完全了解如何在XNA/C#中实现这一点,但在我制作的Flash游戏中,我只是添加了一个垂直速度属性。我将尽可能地用C#编写所有内容

示例;创建速度特性:

float verticalVelocity = 0;
垂直速度应不断降低(通过重力)。在玩家可以访问的地方设置重力属性:

float Gravity = 2.5;
在玩家的
update()
方法中,通过
Gravity
增加
verticalVelocity
。同时通过
verticalVelocity
增加玩家的
Y
位置。这将模拟坠落:

verticalVelocity += Gravity;
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings
当你撞到一个表面时,速度应该重置为0

最后,要跳转,只需从垂直延伸率中减去给定值即可:

public void Jump(float height)
{
    // Only jump if standing on a surface.
    if(verticalVelocity == 0)
        verticalVelocity -= height;
}
使用

代码应该如下所示:

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++;
  }
}
浮地=0.0f;
浮动角度=330.0f;
跳转(){
如果(地面==0.0f)地面=矩形Y;
if(Rectangle.Y使用

代码应该如下所示:

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++;
  }
}
浮地=0.0f;
浮动角度=330.0f;
跳转(){
如果(地面==0.0f)地面=矩形Y;

如果(Rectangle.Y动态修改ySpeed,而不是仅仅添加40,则可以准确创建重力效果

你想宣布一个Y速度吗

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;

祝贺您,您成功了。

如果动态修改ySpeed,您可以准确地创建重力效果,而不仅仅是添加40

你想宣布一个Y速度吗

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;

祝贺您,您成功了。

您可以为运动添加第二个矢量(除了位置)。然后,在每次更新时,将运动矢量添加到位置矢量。在跳转时,设置运动矢量以缓慢地向上移动玩家。在跳转的高峰期,将其更改为向下移动玩家。跳转后,将其设置为零。如果有几件事会影响运动矢量,则需要小心(添加到它而不是设置它,以便不覆盖现有运动)可以为运动添加第二个矢量(除了位置)。然后,在每次更新时,将运动矢量添加到位置矢量。在跳转时,设置运动矢量以缓慢地向上移动玩家。在跳转的高峰期,将其更改为向下移动玩家。跳转后,将其设置为零。如果有几件事会影响运动矢量,则需要小心(添加到它,而不是设置它,以便不覆盖现有运动)的