2011-02-01 2 views
1

У меня есть некоторые активы для моей игры, которые загружаются при загрузке уровня игрового процесса. Я бы предпочел загрузить их, когда приложение запускается на экране загрузки, что, очевидно, довольно стандартная вещь.Предварительная загрузка активов в cocos2D

Моя проблема заключается в том, как новые сцены запускаются внутри cocos2D. Рассмотрим следующий код, который происходит (с некоторыми вариациями) в нескольких местах на протяжении всего проекта:

[[CCDirector sharedDirector] replaceScene:[CCTransitionShrinkGrow transitionWithDuration:0.5f scene:[GameplayLayer scene]]]; 

Это стандартный способ замены текущей сцены с новым. Мой вопрос, учитывая этот формат, как я могу передать предварительно загруженный актив новому GameplayLayer? Есть ли приемлемый способ сделать это в cocos2D? У меня такое ощущение, что я пропустил что-то невероятно простое, но на данный момент это для меня загадка.

+0

Вы используете спрайты или простые изображения? –

+0

Я использую spritesheets, но актив, который меня больше всего беспокоит, - это класс, который я написал сам (т. Е. Не тот, который я могу загрузить в одной сцене и автоматически использовать в любом месте). – jonmorgan

+0

Помимо загрузки активов, у этого есть общие приложения для передачи сообщений и объектов данных между сценами. Например, после того, как уровень завершен, вы можете загрузить новую сцену с кратким изложением количества очков, сколько времени потребовалось и т. Д. – jonmorgan

ответ

4

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

This post получает основную идею.

Эта нить также может быть полезна для вас в этой связи: http://www.cocos2d-iphone.org/forum/topic/2242

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

+0

Я закончил тем, что выбрал однотонный маршрут для своих пользовательских активов, и он отлично работает. Я очень ценю помощь. – jonmorgan

Смежные вопросы