我正试图在XNA中创建一个跳转方法,但我面临着很多问题,它对我不起作用,我已经尝试了大约两个小时,但仍然没有“运气”。有人能给我一个代码样本,或者至少一个方向吗?
注:,我希望跳跃是真实的,使用重力之类的。
谢谢!我把我所有的工作都抹去了,但这是我试过的最新成果,我知道它不一定有效,但还是..。
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;
}
}发布于 2012-03-24 15:46:06
我看到你已经从你的代码中学到了运动方程(当我发表我的评论时,我不认为这是正确的)。不管你有多差,你的问题在于你的时间变量。您正在传递您的游戏时间,但随后使用.1f作为您的时间变量。你真正想要的时间变量是从你开始跳跃的时间。此外,position.Y不太可能完全等同于200或200 + jumpHeight。这是一个浮动(我猜),所以你永远不能相信它会是一个很好的整数。如果您想要指定确切的最大跳高,您必须在此之前执行一些公式,并相应地设置您的velocity.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;
}
}发布于 2012-03-23 17:29:02
你到底想怎样让你的球员跳起来?因为你提到了现实主义,我假设你想让你的玩家跳过X和Y轴,这样它就会沿着弧线移动(如果你愿意的话,抛物线)。
如果这是您所追求的,您将需要复制弹丸运动。这前面的SO线程包含各种方法,您可以在其中实现这样的动作。
编辑:你应该能够使用相同的方程式。对于垂直跳跃,角度将是90度,或pi/2,如果你是与弧度工作。如果你是按你的方向键,你将不得不使用同样的方程式。你想让你的玩家开始跳跃的角度必须由你自己来选择。通常最大范围是在45度(pi/4)的角度,假设使用相同的力,所以你的选择真的在0到45度之间。
https://stackoverflow.com/questions/9843728
复制相似问题