我正在尝试使用LibGDX用JAVA制作一款类似Canabalt的游戏,在游戏中,背景从右向左加速,而玩家保持在同一位置。距离每秒增加1,速度加速0.15f,如下所示:
public void update(float delta){
timeState += delta;
speed += 0.15f;
if(timeState >= 1){
timeState = 0f;
distance += 1;
}
if (speed > MAX_SPEED) speed = MAX_SPEED;
}
但我不希望距离是恒定的,我希望它相对于速度变化。因此,随着速度的增加,距离也开始更快地增加。当达到最大速度时,距离增量也应该是恒定的。我该如何存档?
我认为让distance
表示覆盖的真实距离可能更简单,比如:
public void update(float delta){
distance += speed * delta; // distance = speed * time
speed += 0.15f;
if (speed > MAX_SPEED) speed = MAX_SPEED;
}
这样,你的变量实际上反映了游戏中发生的事情,而不必使用模糊的时间状态变通方法。
这里唯一的区别是,distance
现在需要一个float-将其强制转换为int(如(int)distance
)将截断它,并保留上面代码中想要的整数值。
使用数学函数对数应该可以做到这一点,因为你的速度将达到极限,距离也将使用相同的路径,效果会更平滑。