Предварительная загрузка текстур Cocos2D, когда виден стандартный UIKit UIView - PullRequest
0 голосов
/ 14 февраля 2011

Мое приложение использует Cocos2D для анимации и 2D-рендеринга, но "игровое лобби" (это не то, чем оно является, но для всех намерений и целей) все это стандартный UIView / UIKit код.

У меня есть подкласс UIViewController, основной вид которого установлен в файле XIB как EAGLView. Когда я помещаю весь код загрузки Cocos в viewDidLoad, все работает, как и ожидалось, за исключением того, что происходит замораживание на 1-2 секунды, пока Cocos загружает все мои текстуры.

У меня есть около 20 текстур, которые я предварительно загружаю в CCSpriteFrameCache перед запуском моей сцены, поэтому моя анимация сразу становится плавной.

Я пытался переместить этот код загрузки текстуры в метод init моего контроллера представления - но когда я пытаюсь это сделать, Cocos вылетает, по-видимому, из-за отсутствия контекста OpenGL для работы.

Я хочу, чтобы при отображении основного вида UIViewController (без блокировки основного потока) я хотел бы загружать текстуры в фоновом режиме, а затем по окончании переходить между ними * 1017. * и OpenGL EAGLView.

Я знаю, что сейчас в Cocos есть вызов addImageAsync:, так что на самом деле это просто вопрос как-то "обойти закадровый EAGLView / EAGLContext", чтобы я мог в конечном итоге придерживаться Cocos, когда я готов отобразить это представление .

У кого-нибудь есть указания на элегантное решение этой проблемы?

1 Ответ

1 голос
/ 11 апреля 2011

Решением этой проблемы было создание отдельного EAGLContext, с помощью которого я загружал бы текстуры. Этот EAGLContext должен был использовать EAGLSharegroup с фактическим представлением GL, которое я использовал для визуализации содержимого Таким образом, шаги работали так:

  1. Создать / загрузить / показать мой пользовательский интерфейс
  2. Создание моего EAGLView для использования
  3. Отцепить EAGLSгруппировать с этого EAGLView
  4. Создайте EAGLContext, используя эту группу
  5. Загрузить мои текстуры, используя этот EAGLContext
  6. Переключить мой UIView на EAGLView
  7. Текстуры загружены и доступны
...