我正在用LibGDX制作游戏,小行星从屏幕的上边缘随机x位置产生,小行星以0.1f的逐渐增加速度向下移动,当小行星离开屏幕的下边缘时被发送到池中以供重用。我的问题是,经过一段时间后,来自游泳池的小行星速度不同。我希望所有的小行星以相同的渐进速度移动。
这是我的Asteroid类中的更新和重置方法:
public void update(float delta){
y -= speed * delta;
speed += 0.1f;
}
@Override
public void reset() {
// place asteroid at random x position
x = MathUtils.random(minSpawnPoint, maxSpawnPoint);
// place asteroid above screen edge
y = Constants.CAMERA_HEIGHT + Constants.ASTEROID_MAX_SIZE;
}
答案 0 :(得分:1)
如果我理解你的要求,你希望所有的小行星都能慢慢开始并同时提高速度,这样小行星的速度总是相对于彼此。
如果是这种情况,那么您需要只有一个全局速度变量(在小行星类之外),每个小行星将用它来更新其位置。每个小行星都不能保持自己的局部速度变量,因为特定小行星在屏幕上的时间越长,其速度就越高。这将导致小行星的速度不同,具体取决于它们在屏幕上的持续时间。
要解决此问题,请将您的速度变量移动到包含小行星池的类。然后通过将速度乘以delta时间来计算y(deltaY)的变化,并将此值传递给所有小行星。
所以现在,不是让每个小行星在更新方法中占用增量时间,而是取y位置的变化,你可以使用这个值相应地更新小行星的位置。
public void update(float deltaY){
y -= deltaY;
...
}