1

这让我发疯。我正在尝试访问 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);

有什么建议么?

4

1 回答 1

3

首先,当您将 CCB 添加为另一个节点的子节点时,您不应该load:使用loadAsScene:

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

用上面的代码heroheros/pandaCCB文件的根节点。

使用loadAsScene根节点的代码被包装在 CCScene 对象中,因此hero指向 CCScene 实例,而不是 CCB 的根节点。CCScene 的 children 数组只包含一个子节点,它是实际的 CCB 根节点。

接下来,您将加载的 CCB 添加为_heroContainer. 但是,给定 CCB 的动画管理器始终位于 CCB 的根节点上,这意味着(如果您load:不使用loadAsScene:)动画管理器在hero对象中,它不能在_heroContainer节点中:

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

请注意,如果您升级到 cocos2d 的 v3.1,您可以简单地使用hero.animationManager来访问 CCBAnimationManager。

于 2014-06-18T11:46:32.690 回答