C# 创建跳转函数

C# 创建跳转函数,c#,xna,C#,Xna,我正在尝试在XNA中创建一个跳转方法,但我面临很多问题,它对我不起作用,我已经尝试了2个小时,但仍然没有“运气”。谁能给我一个代码示例,或者至少一个方向 注意:我希望跳跃是真实的,使用重力等 谢谢大家!! 我抹掉了我所有的工作,但这是我最近尝试的,我知道它肯定不起作用,但仍然 public void Jump(GameTime gameTime) { float currentTime = (float)0.1; if (position.Y == 2

我正在尝试在XNA中创建一个跳转方法,但我面临很多问题,它对我不起作用,我已经尝试了2个小时,但仍然没有“运气”。谁能给我一个代码示例,或者至少一个方向

注意:我希望跳跃是真实的,使用重力等

谢谢大家!! 我抹掉了我所有的工作,但这是我最近尝试的,我知道它肯定不起作用,但仍然

  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;
        }
    }

你到底想怎样让你的球员跳跃?既然你提到了现实主义,我假设你想让你的玩家在X轴和Y轴上跳跃和移动,这样它就会沿着一条弧线(抛物线,如果你愿意的话)

如果这就是你所追求的,你将需要复制。前一个SO线程包含各种方法,您可以在其中实现这种运动

编辑:
您应该能够使用所提供的相同方程式。对于垂直跳跃,角度将为90度,如果使用弧度,则角度将为pi/2。如果按方向键,则必须使用相同的方程式。你希望你的球员开始跳跃的角度必须由你自己选择。通常最大射程是在45度角(
pi/4
)的情况下获得的,假设使用相同的力,那么您的选择实际上是在0到45度之间。

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

因此,为了修复您的原始代码,我认为类似的方法可以工作,尽管完全未经测试:

   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;
       }
   }

当我说“现实”时,我想你误解了我,我只想让玩家在Y轴上跳跃,除非我用移动键按下跳跃键。@idish:我修改了我的回答,希望它能有所帮助。告诉我们你尝试了什么而不是说了多长时间。这个问题可能会为你提供一些想法:通过游戏编程学习并热爱@Byte56。你不会使用实际的运动方程,而是简化,在有效值范围内误差可以忽略不计(但超出该范围的差异较大)但这执行起来要快得多。这通常是可行的,使用的一个例子通常是跳跃,因为高度的有效值通常很小。@这并不是不学习和喜欢它们的理由。知道这些简化方程的来源非常有用。至少知道基于速度、加速度求位置的方程非常感谢您的回答,我稍后会尝试实施它。