我正在尝试在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;
}
}
答案 0 :(得分:1)
我看到你已经从你的代码中学习了运动方程式(当我发表评论时,我认为这些方程式并不存在)。不管你有点关,你的问题在于你的时间变量。您已经过了游戏时间,但之后使用.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;
}
}
答案 1 :(得分:0)
你想如何让你的球员跳跃?既然你提到了现实主义,我假设你希望你的玩家在X和Y轴上跳跃和移动,这样它就会沿着弧线移动(抛物线,如果你愿意的话)。
如果这就是你所追求的,你需要复制projectile motion。 This之前的SO线程包含各种方法,您可以在其中实现此类动作。
编辑:
您应该能够使用相同的方程式。对于垂直跳跃,角度将为90度,如果使用弧度,则为pi/2
。如果按方向键,则必须使用相同的方程式。您希望玩家开始跳跃的角度必须由您自己选择。假设使用相同的力,通常以45度(pi/4
)的角度获得最大范围,因此您的选项实际上在0到45度之间。