У меня проблемы с тем, чтобы обернуть голову вокруг игрового дизайна. На платформе Android у меня есть действие, и я настраиваю его представление контента с помощью пользовательского представления поверхности. Пользовательский вид поверхности выступает в качестве моей панели, и я создаю экземпляры всех классов и выполняю там все чертежи и расчеты.
Вопрос: Должен ли я вместо этого создавать экземпляры других классов в моей деятельности?
Теперь я создаю собственный класс потока, который обрабатывает игровой цикл.
Вопрос: Как я могу использовать этот один класс во всех моих действиях? Или мне нужно каждый раз создавать отдельный экземпляр расширенного класса потока?
В моей предыдущей игре у меня было несколько уровней, которые должны были создавать экземпляр класса потока, а в классе потока мне приходилось устанавливать методы конструктора для каждого отдельного уровня, а в цикле использовать инструкцию switch, чтобы проверить, какой уровень нужно визуализировать. и обновить. Извините, если это звучит странно.
Я просто хочу знать, является ли метод, который я использую, неэффективным (что, вероятно, так и есть) и как правильно разработать его. Я прочитал много уроков, и у меня все еще много проблем с этой конкретной темой. Может быть, ссылка на некоторые учебники, которые объясняют это? Спасибо.
источник
OpenGL ES
вами, вы должны знать, что у рендерераOpenGL ES
уже есть свой собственный поток, и в этом случае вам не нужно вручную создавать и запускать новуюThread
иRunnable
для этой системы.Как правило, ваш игровой цикл самодостаточен внутри одного занятия.
когда вы переключаете активность, вы приостанавливаете / убиваете свой игровой цикл. Отдельные действия должны в любом случае соответствовать приостановке игры (например, потому что вы переключились на действие «отправить письмо друзьям» или «главное меню»)
Для дополнительных уровней вы не должны создавать или уничтожать какие-либо новые темы ... если вы не переключились на "полный уровень, загружая следующий уровень, пожалуйста, подождите" активность, и вам придется перезапустить "основную игру" "Активность в любом случае. Но даже в этом случае вы на самом деле не создаете «лишние» потоки, вы просто создаете один поток в этом одном действии и последовательно убиваете / перезапускаете / убиваете / перезапускаете ... и т.д. этого действия. каждый раз, когда уровень завершен.
источник
Если вы понимаете немецкий, этот урок очень хорош.
Для английского языка я могу рекомендовать этот урок
Что касается класса потока: я не знаю, действительно ли необходимо, чтобы вы могли ссылаться на все классы в вашем приложении. В моей игре я решил это так:
Класс, который отвечает за отрисовку основного GUI, имеет переопределенный метод рендеринга. В этом методе вызывается класс потока, который обновляет все элементы графического интерфейса и обрабатывает вводимые пользователем данные.
Поток также отвечает за поддержание постоянной частоты кадров. В зависимости от игры, которую вы разрабатываете, это может быть важно.
источник