1

我最近刚刚在我的应用程序中实现了重力,但是我无法让它正常工作。每当我执行我的代码时,我的游戏中的角色会立即下降,就好像我在设置它的位置而不是应用重力一样。

所以我的游戏循环中有以下代码(dTime 也是我的游戏循环的增量时间):

float fVelocity = 0;
fVelocity -= GRAVITY * dTime;
velocity += fVelocity * dTime;
pos.y = clampf(velocity, -MAXSPEED, MAXSPEED);

然后重力和 MAXSPEED 定义如下:

#define GRAVITY 100
#define MAXSPEED 500

那么这里有什么看起来错误的东西可能导致这个问题吗?

谢谢!

4

2 回答 2

2

您正在设置位置而不是速度。您没有显示定义“速度”变量的位置,但我假设它从零开始。如果要按照自己的方式进行操作,则需要使用精灵的实际位置对其进行初始化,但是您可能应该尝试以不同方式定义每个变量的方法,以使其更易于理解。

-- Inside you setup --
float acceleration = 0;
float velocity = 0
float positionY = 100;

-- Inside your update --
acceleration += -GRAVITY * dT;
velocity += acceleration * dT;
positionY += velocity * dT;

我没有包括夹子,但你可以夹到任何你想要的东西。

作为旁注,有些人不喜欢将他们的变量与 dT 相乘,因为如果帧速率下降,玩家将移动非常大的量,这使得玩需要精确计时的游戏变得非常困难。如果你不乘以 dT,物理将滞后于游戏。

于 2012-08-05T11:10:07.607 回答
0

每帧 500 像素的最大速度是非常高的。考虑使用较低的重力和最大速度值尝试您的算法(id 说大约 10 重力,50 最大速度),然后根据您所看到的进行调整。

于 2012-08-05T03:51:33.900 回答