在场景中插入带有精灵和物理的CCNode

时间:2014-05-03 08:50:38

标签: ios objective-c cocos2d-iphone spritebuilder

我实际上正在学习SpriteBuilder这对我来说真的是一个很棒的工具,但是我在我的场景中以编程方式包含CCNode时遇到了麻烦。

所以,我有一个场景" Gameplay"我的角色是从其他CCB文件中实现的。

关于风景,我首先将我的地图和一些墙(用于场景限制)放在我的Gameplay.ccb内(带有物理节点)。

然后,我想从外部文件中添加该场景(因为我希望能够在同一场景中的不同场景之间切换)。所以我创建了一个CCSprite,我在里面插入了地图,然后插入了我的墙(这个新文件是map.ccbi)。

当我在场景中实现map.ccbi时,会显示地图,但是墙看起来很远(角色和墙之间没有碰撞)。

地图在我的Gameplay场景的物理节点内实现。

这是我实现地图的代码部分:

- (void)didLoadFromCCB {
    self.userInteractionEnabled = TRUE;

    // Set the class as delegate for collision
    _physicWorld.collisionDelegate = self;

    _hero.physicsBody.collisionType = @"hero";

    // Set up the map
    CCNode *map = [CCBReader load:@"Map/TestIsland"];
    // position the map
    map.position = ccpAdd(_physicWorld.position, ccp(0.5, 0.5));

    // add the map to the world
    [_physicWorld addChild:map z:-2];

}

我的地图是通过课程实现的:

@implementation TestIsland

    - (id)init {
    self = [super init];

    if (self) {
        CCLOG(@"Map loaded");
    }

    return self;
}

@end

1 个答案:

答案 0 :(得分:0)

此问题的关键字可能应为sub-folder(或“tree”)。

Sprite构建器在导入节点时实际上不支持joint(子文件夹到CCNode)。

因此,面对此类问题时,其中一个解决方案是改变您CCNode的方式。

在这种情况下,通过改变它来解决它:

  

LAYER1 >>> LAYER2 >>> LAYER3 >>> ........)

     

CCNode >>> CCSprite + CCPhysicNode >>> CCNode(墙)+ CCNode(障碍物)+ ....

对此:

  

CCNode >>> CCSprite + CCNode(墙)+ CCNode(障碍物)+ ....

感谢@Tibor警告我实施情况良好(它让我觉得麻烦应该在SB的界面中),并为我提供调试工作的好建议。