Должен ли я использовать несколько потоков в моей игре OpenGL ES? - PullRequest
4 голосов
/ 09 марта 2011

Я занимаюсь разработкой игры для iPhone, в которой есть один игрок и много врагов.Я использую OpenGL ES для отображения визуальных элементов игры.

Меня немного смущает вопрос, использовать ли мне только одну нить или несколько потоков для перемещения и управления игроком и врагами.Что вы рекомендуете для этой базовой игровой архитектуры?

Ответы [ 2 ]

8 голосов
/ 10 марта 2011

Я собираюсь не согласиться с Максом в этом вопросе и сказать, что вы не должны полностью игнорировать использование многопоточности в своем приложении. OpenGL ES можно получить из фонового потока, но вы можете общаться только с контекстом OpenGL ES, используя один поток за раз.

У Apple есть целый раздел под названием « Параллельность и OpenGL ES » в их Руководстве по программированию OpenGL ES для iOS. При этом они описывают несколько сценариев повышения производительности приложения OpenGL ES с использованием многопоточности.

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

Многопоточность - не простая тема, но Apple значительно упростила эту задачу с помощью Grand Central Dispatch, поэтому я настоятельно рекомендую прочитать их Руководство по программированию параллелизма , в котором описываются этот и другие методы для достижения многопоточности в вашем приложении. , Кроме того, я вел урок по многопоточности и GCD как часть моего курса по разработке для iOS, видео которого можно найти в iTunes U .

Поскольку Apple выпускает многоядерные устройства, использование многопоточности и GCD теперь очень окупится для вас в будущем.

6 голосов
/ 09 марта 2011

Это действительно зависит от многих вещей.Во-первых, вы не получите никакого повышения производительности, если используете несколько потоков (поскольку все современные iOS-устройства имеют одноядерные процессоры, а iPad2 - 2).Во-вторых, несколько потоков делают любое приложение более изощренным, поскольку вам необходимо отслеживать общие ресурсы, синхронизировать потоки и многое другое.

Используйте несколько потоков, только если вам это действительно нужно.Например, вы загружаете много текстур в память из файла, и это может занять несколько секунд.Если вы сделаете это в том же потоке, где выполняется рендеринг, то весь рендеринг будет зависать на это время.Так что лучше сделать это в отдельном потоке, а затем передать загруженные данные основному.Или вы можете обновить физику в отдельном потоке с более высокой скоростью обновления (однако вы получаете выгоду от этого только на нескольких ядрах).

Если вы начинающий разработчик и создаете простую игру, не используйте несколько потоков.Этот материал требует большого опыта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...