0

我实际上正在学习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
4

1 回答 1

0

这个麻烦的关键字可能应该是sub-folder(或“ tree”)。

导入节点时,Sprite builder 实际上不支持joint(a 的子文件夹)。CCNode

因此,面对此类问题的解决方案之一是改变您制作CCNode.

在这种情况下,它已通过更改此解决:

(第 1 层>>> 第 2层>>>第 3 层>>> ........

CCNode >>> CCSprite + CCPhysicNode >>> CCNode(Wall) + CCNode(Obstacle) + ....

对此:

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

感谢@Tibor 警告我实现很好(它让我觉得问题应该出在SB 的接口上),并为我提供了调试工作的好技巧。

于 2014-05-06T14:43:03.513 回答