首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建跳转函数

创建跳转函数
EN

Stack Overflow用户
提问于 2012-03-23 17:24:19
回答 2查看 1.6K关注 0票数 0

我正试图在XNA中创建一个跳转方法,但我面临着很多问题,它对我不起作用,我已经尝试了大约两个小时,但仍然没有“运气”。有人能给我一个代码样本,或者至少一个方向吗?

注:,我希望跳跃是真实的,使用重力之类的。

谢谢!我把我所有的工作都抹去了,但这是我试过的最新成果,我知道它不一定有效,但还是..。

代码语言:javascript
复制
  public void Jump(GameTime gameTime)
    {
        float currentTime = (float)0.1;
        if (position.Y == 200)
        {
            position.Y += velocity.Y*currentTime -gravity * (float)(Math.Pow(currentTime,2)) / 2;
        }
        if (position.Y == 200 + jumpHeight)
        {
            position.Y -= velocity.Y * currentTime - gravity * (float)(Math.Pow(currentTime, 2)) / 2;
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-24 15:46:06

我看到你已经从你的代码中学到了运动方程(当我发表我的评论时,我不认为这是正确的)。不管你有多差,你的问题在于你的时间变量。您正在传递您的游戏时间,但随后使用.1f作为您的时间变量。你真正想要的时间变量是从你开始跳跃的时间。此外,position.Y不太可能完全等同于200200 + jumpHeight。这是一个浮动(我猜),所以你永远不能相信它会是一个很好的整数。如果您想要指定确切的最大跳高,您必须在此之前执行一些公式,并相应地设置您的velocity.Y (求解当速度等于0时,即跳跃的顶部)。

因此,要修复您的原始代码,我认为这样的东西可以工作,尽管完全未经测试:

代码语言:javascript
复制
   public void Jump(GameTime gameTime)
   {
       if(jumping && position.Y > groundLevelAtPlayer) {
           //Get the total time since the jump started
           float currentTime = gameTime.totalTime - character.timeofjumpStart;
           //gravity should be a negative number, so add it
           position.Y += (velocity.Y * currentTime)
               + (gravity * ((float)(Math.Pow(currentTime, 2)) / 2));
       }
       else 
       {
           jumping = false;
       }
   }
票数 1
EN

Stack Overflow用户

发布于 2012-03-23 17:29:02

你到底想怎样让你的球员跳起来?因为你提到了现实主义,我假设你想让你的玩家跳过X和Y轴,这样它就会沿着弧线移动(如果你愿意的话,抛物线)。

如果这是您所追求的,您将需要复制弹丸运动前面的SO线程包含各种方法,您可以在其中实现这样的动作。

编辑:你应该能够使用相同的方程式。对于垂直跳跃,角度将是90度,或pi/2,如果你是与弧度工作。如果你是按你的方向键,你将不得不使用同样的方程式。你想让你的玩家开始跳跃的角度必须由你自己来选择。通常最大范围是在45度(pi/4)的角度,假设使用相同的力,所以你的选择真的在0到45度之间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9843728

复制
相关文章

相似问题

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