Доступ к временной шкале анимации корневого узла CCB — Cocos2D

#ios #cocos2d-iphone #spritebuilder

#iOS #cocos2d-iphone #spritebuilder

Вопрос:

Это сводит меня с ума. Я пытаюсь получить доступ к корневому узлу CCB, чтобы я мог использовать временную шкалу анимации SpriteBuilder/Cocos2d .

У меня heroCharacter.m это пользовательский класс моего анимационного CCNode.

Я импортирую его в bedroomScene.m . использование

 CCNode *_heroContainer;
  

и, на мой взгляд, загрузился

 //Import Hero Scene
    CCNode *hero = [CCBReader loadAsScene:@"heros/panda"];
    [_heroContainer addChild:hero];
  

Когда я запускаю AnimationManager, это нулевое значение.

 CCBAnimationManager* animationManager = _heroContainer.userObject;
        NSLog(@"AM: %@", animationManager);
  

Есть предложения?

Ответ №1:

Прежде всего, когда вы добавляете CCB в качестве дочернего элемента другого узла, вы должны использовать load: не loadAsScene:

 CCNode *hero = [CCBReader load:@"heros/panda"];
[_heroContainer addChild:hero];
  

С приведенным выше кодом hero будет корневой узел файла heros/panda CCB.

В вашем коде loadAsScene корневой узел обернут в объект CCScene и, следовательно hero , указывает на экземпляр CCScene, а не на корневой узел CCB. Дочерний массив CCScene содержит только один дочерний узел, который будет фактическим корневым узлом CCB.

Затем вы добавляете загруженный CCB в качестве дочернего элемента _heroContainer . Однако менеджер анимации для данного CCB всегда находится на корневом узле CCB, что означает (если вы load: не использовали loadAsScene: ), что менеджер анимации находится в hero объекте, он не может быть в _heroContainer узле:

 CCBAnimationManager* animationManager = hero.userObject;
NSLog(@"AM: %@", animationManager);
  

Обратите внимание, что при обновлении cocos2d до версии 3.1.1 вы можете просто использовать hero.animationManager для доступа к CCBAnimationManager.

Комментарии:

1. Удивительные. Глупые ошибки с моей стороны