Xna 游戏中的跳跃效应
我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许横向移动,但我希望我的精灵能够缓慢地进行跳跃,而不是瞬间传送到那里(现在我有一个类似矩形的东西。每次我跳的时候,Y+=40,使精灵立即出现在那里)。有人有什么见解吗?你最终会想在游戏中添加重力和其他可能的力,因此我强烈建议你省去很多麻烦,并实施一些基本的力系统。这可以使用Xna 游戏中的跳跃效应,xna,Xna,我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许横向移动,但我希望我的精灵能够缓慢地进行跳跃,而不是瞬间传送到那里(现在我有一个类似矩形的东西。每次我跳的时候,Y+=40,使精灵立即出现在那里)。有人有什么见解吗?你最终会想在游戏中添加重力和其他可能的力,因此我强烈建议你省去很多麻烦,并实施一些基本的力系统。这可以使用Vector2s来完成,因为你可以将它们添加到角色的速度中。然后只需应用instantan向你的角色施加压力,使其向上 如果
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;
祝贺您,您成功了。您可以为运动添加第二个矢量(除了位置)。然后,在每次更新时,将运动矢量添加到位置矢量。在跳转时,设置运动矢量以缓慢地向上移动玩家。在跳转的高峰期,将其更改为向下移动玩家。跳转后,将其设置为零。如果有几件事会影响运动矢量,则需要小心(添加到它而不是设置它,以便不覆盖现有运动)可以为运动添加第二个矢量(除了位置)。然后,在每次更新时,将运动矢量添加到位置矢量。在跳转时,设置运动矢量以缓慢地向上移动玩家。在跳转的高峰期,将其更改为向下移动玩家。跳转后,将其设置为零。如果有几件事会影响运动矢量,则需要小心(添加到它,而不是设置它,以便不覆盖现有运动)的