2014-12-26 4 views
2

Я создаю игру для Android с помощью Canvas для 2D-графики. Как я это делал до сих пор, у меня есть GameView (SurfaceView), который имеет GameLoop, который вызывает его метод onDraw().Разработка игр для Android Несколько сцен

Теперь для каждой сцены я выдвинул GameView и для MainMenu, например, я рисую все кнопки & Фоны. Когда я нажимаю кнопку, я буду определять, что делать дальше в MainScene (расширение GameView) onTouchEvent. Предположим, я нажму кнопку «Настройки», а затем запустил новую активность, которая содержит только новую сцену (другая сцена, расширяющая GameView).

Для каждой сцены у меня есть новый Activity, содержащий расширение GameView, которое включает GameLoop, чтобы нарисовать 20/30 раз в секунду. И в onTouchEvents я либо начну новую деятельность/закончу действие, либо сделаю что-то еще.

MainActivity (MainScene) -> SettingsActivity (SettingsScene) или StoreActivity (StoreScene) и т. Д. Правильно ли это сделать? Или это неэффективно?

Я не мог найти учебники или много, чтобы читать о многопользовательских играх с использованием холста.

+0

Правильный ответ часто: «используйте 2D-движок с открытым исходным кодом». Я хотел бы отметить, что если вы передаете Canvas, который вы получаете из 'onDraw()', вы, вероятно, используете View, а не Surface, и нет смысла использовать SurfaceView. Просто используйте пользовательский вид - http://developer.android.com/training/custom-views/index.html. Или просто используйте GLES; простой пример GLSurfaceView: https://code.google.com/p/android-breakout/. – fadden

ответ

1

На самом деле запуск новой активности для каждой сцены в порядке, когда вы разрабатываете стандартные приложения для Android. Это было бы нормально для простых игр или когда вы не хотите вручную управлять ресурсами (активность будет уничтожена, когда система потребует ресурсов и будет воссоздана по мере необходимости). В этом подходе вы не имеете полного контроля над переходами Сцена, и вам нужно будет заново создать некоторые вещи для каждого вида деятельности, которые можно было бы использовать один раз для всей игры.

Если вы хотите сделать переходы сцены более быстрыми и эффективными, у вас есть как минимум еще 3 варианта.

  1. Фрагменты. Вместо того, чтобы запускать активность для каждой сцены, вы можете заменить фрагменты, содержащие представление о вашей сцене. В этом подходе вы больше контролируете состояние переходов и фрагментов.

  2. Просмотров. Вместо замещающих фрагментов вы можете заменить взгляды таким же образом, используя, например, компоновку фреймов в качестве контейнера.

  3. Ящики сцене. Вместо замены видов вы можете просто заменить класс Drawer в своем представлении. Например, вы можете создать интерфейс Scene, который содержит метод draw (Canvas, args ...) и сделать все ваши сцены реализованы. После этого вы можете просто заменить сцену, которую хотите рисовать внутри «Вид».

В любом случае, я предпочитаю использовать http://libgdx.badlogicgames.com/ для простых игр для Android. Главное преимущество заключается в том, что вы можете запускать свою игру на своем рабочем столе, чтобы проверить, а не ждать развертывания на устройстве.