Для объяснения проблемы:
- Класс GamePlay инициализирует экземпляр класса Ship как автоматическое освобождение
- Класс Ship инициализирует класс спрайта и добавляет его в качестве дочернего к parentNode (класс GamePlay), которыйсохраняет спрайт, но не сам класс Корабля
Оле верно, что Корабль нуждается в сохранении в коде, который вы опубликовали.Лично я вижу здесь проблему с дизайном.Ваш класс Ship должен быть производным от CCNode, и вы должны добавить Ship в иерархию узлов с помощью addChild.
Если Ship происходит только из NSObject, то, что вы в итоге получите, похоже на «сломанную» иерархию узлов:
- Класс Cocos2D GamePlay (то есть CCLayer)
- NSObject Класс корабля
- Экземпляр Cocos2D CCSprite содержится в классе Ship, но добавлен в класс GamePlay
Проблема в том, что спрайт класса «Корабль» «управляется» классом «Корабль», но сохраняется классом GamePlay.Это означает, что вы несете ответственность за сохранение классов не-CCNode, таких как Ship самостоятельно.Следующее делает более простой и более соответствующий Cocos2D дизайн, потому что он опирается на Cocos2D, управляющий всей иерархией узлов:
- Cocos2D GamePlay класс (т.е. CCLayer)
- Cocos2D Ship class (производныйиз CCNode)
- Экземпляр Cocos2D CCSprite, содержащийся в классе Ship, добавленный в класс Ship как дочерний
Таким образом, вы добавите класс Ship в качестве дочернего в класс GamePlay.Класс Ship добавляет свой экземпляр CCSprite к себе (класс Ship).Вы можете (и должны) избавиться от parentObject, переданного в методе shipWithParentNode.В Cocos2D довольно опасно передавать экземпляр узла другому узлу, у вас может возникнуть соблазн сохранить его, что может привести к утечке всей сцены из-за циклических зависимостей сохранения (a сохраняет b, b сохраняет a, оба могут 't go go).
В целом, это делает вашу иерархию узлов немного глубже, но управлять ею намного проще.Вы можете предположить, что все объекты являются производными от общего базового класса (CCNode), и вы можете рассчитывать на то, что Cocos2D освободит иерархию узлов в правильном порядке в нужное время.