首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >游戏中的跳跃效果

游戏中的跳跃效果
EN

Stack Overflow用户
提问于 2012-02-23 10:33:06
回答 4查看 667关注 0票数 2

我目前正在尝试用XNA制作一个基本的平台,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入,允许侧向移动,但我希望我的精灵慢慢地进入跳跃状态,而不是立即传送到那里(现在我每次跳的时候都有像Recangle.Y += 40这样的东西,让精灵立即出现在那里)。有谁有什么见解吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-23 14:46:34

我并不完全理解如何在XNA/C#中实现这一点,但在我制作的Flash游戏中,我只是添加了一个垂直速度属性。我会尽量把所有的东西都写成C#。

示例;创建速度属性:

代码语言:javascript
运行
复制
float verticalVelocity = 0;

垂直速度应该不断降低(通过重力)。在播放器可访问的某个位置设置重力属性:

代码语言:javascript
运行
复制
float Gravity = 2.5;

在播放器的update()方法中,将verticalVelocity递增Gravity。也可以通过verticalVelocity来增加你的球员的Y位置。这将模拟下落:

代码语言:javascript
运行
复制
verticalVelocity += Gravity;
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings

当您击中曲面时,速度应重置为0。

最后,要跳转,只需从verticalVelocity中减去一个给定值

代码语言:javascript
运行
复制
public void Jump(float height)
{
    // Only jump if standing on a surface.
    if(verticalVelocity == 0)
        verticalVelocity -= height;
}
票数 0
EN

Stack Overflow用户

发布于 2012-02-23 12:22:32

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

如果您确实不想使用物理引擎,可以使用Y和角色X的跳跃最高点创建Vector2,然后使用Vector2.Lerp方法在角色位置和跳跃结束点之间进行插值。

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

票数 0
EN

Stack Overflow用户

发布于 2012-02-23 15:46:33

使用sinusoid

代码应该如下所示:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9406331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档