我最近刚刚将重力应用到我的应用中,但是我无法让它正常工作。每当我执行我的代码时,游戏中的角色会立即下降,就好像我正在设置它的位置而不是重力。
所以我在游戏循环中有以下代码(dTime是我游戏循环的增量时间):
float fVelocity = 0;
fVelocity -= GRAVITY * dTime;
velocity += fVelocity * dTime;
pos.y = clampf(velocity, -MAXSPEED, MAXSPEED);
然后重力和MAXSPEED定义如下:
#define GRAVITY 100
#define MAXSPEED 500
那么这里看起来有什么错误可能导致这个问题吗?
谢谢!
答案 0 :(得分:2)
您正在设置位置而不是速度。您没有显示定义'velocity'变量的位置,但我假设它从零开始。你需要用精灵的实际位置来初始化它,如果你要按照你的方式去做,但是你应该尝试用不同的方式定义每个变量,这样就更容易理解。
-- 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,那么物理学将会延迟游戏。
答案 1 :(得分:0)
每帧500像素的最大速度可能会变高。考虑尝试使用较低的重力和最大速度值(id表示大约10重力,50最大速度),然后根据您所看到的情况进行调整。