2015-05-05 3 views
2

В названии говорится все.делает spritebatch рисует несколько этапов с одной партией? Libgdx

это вызов нескольких методов Stage s draw() с тем же SpriteBatcher объект происходит только в одной партии или один Stage = одна партия?

У меня есть ситуация, когда я не хочу использовать актеров на фоне игры, я просто рисую ее напрямую. Но это выглядит так.

  1. начинают партия
  2. Жеребьевка фон
  3. конец партии
  4. вызов все стадии рисовать

Если ваш ответ таков: SpriteBatch нарисует несколько этапов в одной партии, то я могу сказать, что более эффективно помещать каждый спрайт в качестве члена объекта Actor, а затем добавлять все объекты Actor к Stage obj ect, затем вызовите сцену. Таким образом, я могу свести к минимуму вызов, чтобы начать пакетный и конечный пакет, который может повысить производительность, как я знаю.

+3

Современные телефоны нижнего уровня могут выполнять примерно 50 обратных вызовов до того, как частота кадров упадет ниже 60 FPS. Конечно, есть и другие факторы, которые могут повлиять на это, но почти наверняка не стоит усложнять ваш код, чтобы сохранить один призыв к обращению. – Tenfour04

+0

- дополнительная информация. Великий. Благодарю. – mubuss

+0

Еще одна вещь. Кнопки и таблицы в libgdx также вызывают пакетный сброс по умолчанию, поэтому вы получите дополнительный призыв рисования для каждого из них, если вы не вызываете setTransform (false); на них, что прекрасно, если вы не планируете масштабировать или вращать их. Они действительно могут складываться, если вы используете много кнопок. – Tenfour04

ответ

5

Глядя на Stages code, похоже, он вызывает batch.begin() и batch.end():

public void draw() { 
    Camera camera = viewport.getCamera(); 
    camera.update(); 

    if (!root.isVisible()) return; 

    Batch batch = this.batch; 
    if (batch != null) { 
     batch.setProjectionMatrix(camera.combined); 
     batch.begin(); 
     root.draw(batch, 1); 
     batch.end(); 
    } 

    if (debug) drawDebug(); 
} 

Таким образом, добавляя свои Actor S к Stage может уменьшить отрисовки вызовов.
Но помните, что если Batch заполнен, в любом случае это будет flush() ed, что приводит к призыву к розыгрышу.
Таким образом, это не обязательно уменьшает количество обратных вызовов. Также не думайте о производительности много, если у вас нет проблем с перфорацией. Если другие решения швы «чище», я думаю, это не стоит менять.
Важно помнить, что при работе с более чем одним Batch можно позвонить по телефону end(), прежде чем звонить begin() для другого. У вас никогда не должно быть 2 Batch «одновременно».

+0

Спасибо. Я не знаю, что партия может быть полной. – mubuss

+3

Используя конструктор по умолчанию, 'SpriteBatch' может содержать 1000' Sprite', перед вызовом 'flush()'. Вы можете увеличить этот размер с помощью конструктора с 'int size', максимум здесь 5460. Вы можете прочитать это [здесь] (http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx /graphics/g2d/SpriteBatch.html#SpriteBatch-int-com.badlogic.gdx.graphics.glutils.ShaderProgram-) – Springrbua

+0

Спасибо. ты восхитителен. – mubuss

Смежные вопросы