libGDX:游戏通用速度

时间:2015-02-06 23:00:59

标签: java android libgdx

我是libGDX的新手, 我试图在我的游戏中制作一个功能,玩家点击一个按钮,整个游戏速度提高了2倍。 我不想改变每个游戏元素的速度,我正在寻找一个控制游戏标记的全局选项。速度。

3 个答案:

答案 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);