我是libGDX的新手, 我试图在我的游戏中制作一个功能,玩家点击一个按钮,整个游戏速度提高了2倍。 我不想改变每个游戏元素的速度,我正在寻找一个控制游戏标记的全局选项。速度。
答案 0 :(得分:2)
为了保存适当的帧独立应用程序(游戏),您必须使用两帧之间传递的时间。如果你在一个名为 delta 或 deltaTime 的浮动参数的形式中使用Game,Libgdx已经在你的屏幕的渲染方法中提供了这个。如果不这样做,您仍然可以使用Gdx.graphics.getDeltaTime()来获取它。
如果你已经这样做了(你应该!)。在游戏更新之前,只需将它乘以2即可。
@Override
public void render(float delta){
delta = delta * 2;
//game logic
...
}
答案 1 :(得分:0)
同意Lestat将delta乘以2(或任何所需因子)。只是想为从绘制图形的代码计算(对象位置,碰撞和填充)的不同代码添加建议。然后,当您计算delta时,根据它的值还计算您的计算代码应执行多少次,并执行多次。然后在那之后做一次绘图。 重点是,如果你加快时间(或者你在某些设备上的FPS很慢),你可能会错过一些重要的时间框架。即你有一些子弹每帧5px。而且你加速你的时间(或帧速率下降)2帧(和2次计算)之间的差异可能太大,如果你只用子弹速度乘以delta参数,你的移动步骤可能太大,所以你的子弹可以避免一些(命中)探测,即通过敌人而不击中它。因此,主要的想法是以较小的步骤重复计算("游戏时钟")并且不要错过动作并尽可能多地吸引。
答案 2 :(得分:0)
我写了这个滴答计时器来进行世界更新。它告诉世界每50毫秒更新一次状态,每秒更新20次。
每次都会调用render方法来更新不重要的东西,例如不需要进行世界更新的粒子效果以及当前状态下的世界和npc实体以给定速度移动。
要提高游戏速度,只需将游戏滴答声阈值ticktime
修改为较小的数字即可。但是,由于Gdx很可能会以60fps的速度运行,因此将其设置为低于16不会产生效果。
// time elapsed in the world in milliseconds
public long time = 0l;
// how long to wait between ticks, in milliseconds
public long ticktime = 50l;
// when did we last send a tick?
public long lastTick=0l;
@Override
public void render()
{
float delta = Gdx.graphics.getDeltaTime();
// convert to milliseconds
time+=(long)(delta*1000);
// Simple substraction to see if enough time passed for a world update
if(time - ticktime > lastTick) {
GameWorld.tick();
long elapsed = time - lastTick;
if(elapsed > ticktime) {
long missed = elapsed / ticktime;
if(missed > 3l) {
System.err.println("Warning: skipping "+missed+" ticks");
}
}
lastTick = time - (time % ticktime);
}
WorlRenderer.render(delta);