我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许侧向移动,但我希望我的精灵慢慢地进入跳跃状态,而不是立即传送到那里(现在我每次跳的时候都有像Recangle.Y += 40这样的东西,让精灵立即出现在那里)。有谁有什么见解吗?
发布于 2012-02-23 14:46:34
我并不完全理解如何在XNA/C#中实现这一点,但在我制作的Flash游戏中,我只是添加了一个垂直速度属性。我会尽量把所有的东西都写成C#。
示例;创建速度属性:
float verticalVelocity = 0;垂直速度应该不断降低(通过重力)。在播放器可访问的某个位置设置重力属性:
float Gravity = 2.5;在播放器的update()方法中,将verticalVelocity递增Gravity。也可以通过verticalVelocity来增加你的球员的Y位置。这将模拟下落:
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;
}发布于 2012-02-23 12:22:32
你最终会想要在你的游戏中添加重力和可能的其他力量,所以我强烈建议你省去很多痛苦,实现一些基本的力量系统。这可以使用Vector2s来完成,因为您可以将它们添加到角色的速度中。然后只需对你的角色施加一个瞬间的力来将它向上推。
如果您确实不想使用物理引擎,可以使用Y和角色X的跳跃最高点创建Vector2,然后使用Vector2.Lerp方法在角色位置和跳跃结束点之间进行插值。
这通常是一个非常糟糕的系统,我强烈建议你要么使用现有的物理引擎,要么自己做一个简单的引擎。
发布于 2012-02-23 15:46:33
使用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++;
}
}https://stackoverflow.com/questions/9406331
复制相似问题