关于在libgdx

时间:2016-06-12 10:01:55

标签: java libgdx game-loop

最近,我决定制作一款新游戏并将这个机会提供给libgdx框架。很久以前,我曾经在Slick2D中做过一些游戏,我记得他们在更新(delta)和draw()对象时的方法是不同的,然后现在在libgdx中只有渲染(delta)。所以我开始想到,抽象游戏,并使用更新和创建自己的游戏和屏幕类。画。但是,现在我对渲染方法中的参数增量有疑问。观看互联网上关于libgdx实现概念更新和绘制的一些示例,人们将delta参数从render方法传递到更新和绘制方法。从这个描述中,我的问题是:

  1. 是否可以实现更新和绘制方法的概念?
  2. 我应该将delta参数传递给draw方法吗?
  3. 如果在更新(delta)metod中我做了计算,那么绘制方法中delta参数的目的或用例是什么?

2 个答案:

答案 0 :(得分:1)

  1. 是的,separate concerns通常是个好主意。如果你的游戏循环只存在更新游戏逻辑和绘制游戏状态,那么这些方法就会很好。当您的游戏增长时,您可能需要添加其他步骤(例如多个渲染过程,同步多重播放器等)。
  2. 在更新游戏逻辑时,通常只需要增量时间,而不是在渲染时。但是如果你确实需要它,那么将它作为参数传递就可以了。
  3. 自上次调用render方法以来,以秒为单位。您可以使用它以帧速率独立的方式更新游戏逻辑。例如。 calculate您的角色的正确位置,correct frameanimation等。
  4. 请注意,只是按原样取得增量时间可能导致例如传送到hick-up并不是离散的。因此,限制价值通常是一个好主意(例如delta = Math.min(delta, 1/30f);)。当您需要游戏逻辑离散时,通常会使用fixed time step

答案 1 :(得分:0)

您可以使用LibGDX的Scene2d包:

https://github.com/libgdx/libgdx/wiki/Scene2d

Stage类确实提供了单独的act和draw方法。所以Game类中的render()方法看起来像这样:

@Override
public void render() {      
    Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);   
    stage.act();
    stage.draw();
}