2014-06-18 2 views
1

이것은 나를 미치게합니다. SpriteBuilder/Cocos2d을 사용하여 애니메이션 타임 라인을 얻을 수 있도록 CCB 루트 노드에 액세스하려고합니다.CCB 루트 노드 애니메이션 타임 라인에 액세스 - Cocos2D

내 애니메이션 CCNode의 사용자 지정 클래스 인 heroCharacter.m이 있습니다.

bedroomScene.m으로 가져오고 있습니다. 나는 그것이 null 값입니다 AnimationManager (애니메이션 관리자)를 실행하면

CCNode *_heroContainer; 

를 사용하여 내보기에서 것은
//Import Hero Scene 
    CCNode *hero = [CCBReader loadAsScene:@"heros/panda"]; 
    [_heroContainer addChild:hero]; 

로드

했다.

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

의견이 있으십니까? 다른 노드의 아이로서 CCB를 추가 할 때 모든

답변

3

첫째, 당신은 heros/panda CCB 파일의 루트 노드가 될 위의 코드 hero하지 loadAsScene:

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

load:를 사용해야합니다.

loadAsScene 코드를 사용하면 루트 노드가 CCScene 개체에 래핑되므로 hero은 CCB의 루트 노드가 아니라 CCScene 인스턴스를 가리 킵니다. CCScene의 하위 배열에는 실제 CCB 루트 노드가 될 하나의 하위 노드 만 포함됩니다.

다음은로드 된 CCB를 _heroContainer의 하위 항목으로 추가하는 것입니다. 주어진 CCB에 대한 애니메이션 관리자가 애니메이션 관리자가 hero 객체에 (당신이하지 loadAsScene:load:를 사용하는 경우)을 의미 CCB의 루트 노드에 항상 그러나, _heroContainer 노드에있을 수 없습니다

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

cocos2d의 v3.1로 업그레이드 할 경우 간단하게 hero.animationManager을 사용하여 CCBAnimationManager에 액세스 할 수 있습니다.

+0

놀라운. 내 부분에 어리석은 실수 – memyselfandmyiphone