2016-06-12 2 views
0

Недавно я решил создать новую игру и предоставить этот шанс для рамки libgdx. Давным-давно, я делал некоторые игры в Slick2D, и я помню, что их подход, когда дело доходит до объекта update (delta) и draw(), был другим, а теперь в libgdx, который имеет только render (delta). Поэтому я пришел к идее, к абстрактной игре, и сделал свой собственный класс Game and Screen с обновлением & ничья. Однако теперь я сомневаюсь в параметре delta из метода render. Наблюдая некоторые примеры в Интернете относительно libgdx с обновлением концепции реализации и рисованием, люди передавали параметр дельты из метода рендеринга как для методов обновления, так и для рисования. Из этого описания у меня вопросы:сомнения в реализации различного подхода метода рендеринга в libgdx

  1. Можно ли реализовать концепцию обновления и рисовать методы?
  2. Должен ли я передавать метод delta parametar для рисования?
  3. Если в методе update (delta) я выполняю вычисления, в чем цель или использование дельта-параметров в методе рисования?

ответ

1
  1. Да, это, как правило, хорошая идея separate concerns. Если ваш игровой цикл существует только для обновления игровой логики и состояния рисования, то эти методы будут хорошими. Когда ваша игра будет расти, вам может потребоваться добавить дополнительные шаги (например, несколько проходов рендеринга, синхронизацию многопользовательских карт и т. Д.).
  2. Обычно вам требуется дельта-время при обновлении игровой логики, а не при ее рендеринге. Но если вам это нужно, тогда это прекрасно, чтобы передать его в качестве аргумента.
  3. Это время, в секундах, так как в предыдущий раз был выдан метод визуализации. Вы используете его для обновления вашей логики игры в независимом от частоты кадров вопросе. Например. calculate правильного положение персонажа, correct frame из animation и т.д.

Обратите внимание, что только что нашел время дельты как есть может вызвать, например, телепортируясь по взлётам и не дискретно. Поэтому обычно рекомендуется ограничивать значение (например, delta = Math.min(delta, 1/30f);). Использование fixed time step часто используется, когда вам нужно, чтобы ваша игровая логика была дискретной.

+0

У меня есть еще один вопрос оффтоп, я должен использовать SpriteBatch из libgdx во всей игре или в классе экрана? – Kapparino

+0

Это не имеет большого значения, но поскольку SpriteBatch использует собственные ресурсы opengl, немного лучше использовать их, чем вместо их воссоздания. Помните, что * not * использовать 'static' для этого. – Xoppa

+0

Я думал о том, чтобы передать это как параметр для метода draw и использовать его во всей игре, вместо того, чтобы определять его атрибут в каждом классе. – Kapparino

0

Вы можете использовать Scene2d пакет LibGDX в:

класс

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

Этап не предусматривает отдельный акт и сделать методы. Таким образом, метод отрисовки() в классе Game заканчивает тем, как это:

@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(); 
} 
Смежные вопросы