Cocos2d: я должен использовать только (id) init для инициализации, или я могу использовать (void) onEnter для позднего выделения? - PullRequest
2 голосов
/ 31 августа 2011

Изучая Cocos2d, я обнаружил, что - (void)onEnter, - (void)onExit могут использоваться как их аналоги, - (void)viewDidLoad, - (void)viewDidUnload из iOS UIKit.

Я знаю, что они не являются технически хорошей заменой оригинальной - (id)init, и я часто вижу поучительные тексты для изучения Cocos2d, использую только метод - (id)init для всех своих свойств и переменных.

Однако, если я использую - (void)onEnter для выделения и инициализации, я могу сослаться на self.parent для более чистого кода.

Можно ли предположить, что я могу продолжать использовать - (void) onEnter для выделения и инициализации, не беспокоясь о том, является ли это правильным способом разработки с использованием инфраструктуры Cocos2d?

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

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

-(void) onEnter и -(void) onExit методы на самом деле больше похожи на -(void) viewWillAppear и -(void) viewWillDisappear, чем -(void) viewDidLoad и -(void) viewDidUnload

Имейте в виду:

  • onEnter также вызывается рекурсивно привсе дочерние элементы вашего узла.
  • onEnter может вызываться несколько раз в зависимости от того, как вы обрабатываете свои сцены, тогда как init будет вызываться только один раз.Будьте осторожны, чтобы ваши объекты не протекали, случайно выделив их несколько раз.
1 голос
/ 01 сентября 2011

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

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

...