Я просто забираю разработку для Android, чтобы сделать игру.Прикасался к нему раньше, но только подобрал основы.Я немного запутался, как настроить основной цикл.Я был в XNA (C #), и мне нравится отдельный цикл обновления / рисования.
Мне было интересно, как работает типичный Android-геймплей?Я искал в Интернете и наткнулся на 2 метода:
public void run() {
while (running) {
//Method 1: update is called here
view.update();
Canvas c = null;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
//Method 2: update is called inside view.onDraw
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
Давайте возьмем обновление игровых сущностей в качестве примера для 2 методов:
//METHOD1
public void onDraw(Canvas canvas)
{
for (GameEntity entity : entities)
{
entity.update();
entity.draw(canvas);
}
}
//END METHOD 1
//METHOD 2
public void update()
{
for (GameEntity entity : entities)
{
entity.update();
}
}
public void draw(Canvas canvas)
{
for (GameEntity entity : entities)
{
entity.draw(canvas);
}
}
//END METHOD 2
Теперь у меня естьУ меня нет опыта работы с потоками, поэтому я понятия не имею, как XNA выполняет циклы обновления / рисования за экранами в xna.Но используя метод 1, я должен был бы пройти через все сущности дважды, один раз для обновления и другой раз для отдельного рисования.Боюсь, это убьет производительность, но я видел это в примерах онлайн.
Я что-то упустил или я прав, и является ли метод 2 наилучшим по производительности?