Xcode & Cocos2d: Как я могу установить свойство int сцены, которую я создаю?

В моем mainMenu.h/m у меня есть метод, который загружает первую сцену моей игры.

- (void)loadAgainstTheClockMode:(id)sender
{
    CCScene *scene = [HelloWorldLayer scene];
    [[CCDirector sharedDirector] replaceScene:[CCTransitionZoomFlipX transitionWithDuration:0.2 scene:scene]];
}

Как вы видите, я создаю экземпляр сцены HelloWorldLayer, а затем переключаюсь на нее.

Я хотел бы иметь возможность передать целочисленное значение HelloWorldLayer, который позже сообщит ему, какой файл уровня загружать, чтобы избавить меня от необходимости повторять весь код для каждого уровня в игре.

В моем HelloWorldLayer я установил свойство, к которому я думал, что смогу получить доступ при определении сцены...

@interface HelloWorldLayer : CCLayer

+(CCScene *)scene;
@property int levelToLoadUp;
@end

Я надеялся, что смогу сделать это при создании сцены...

- (void)loadAgainstTheClockMode:(id)sender
{
    CCScene *scene = [HelloWorldLayer scene];
    levelToLoadUp = 1;
    [[CCDirector sharedDirector] replaceScene:[CCTransitionZoomFlipX transitionWithDuration:0.2 scene:scene]];
}

Может ли кто-нибудь помочь мне достичь этого? Спасибо...!

1 ответ

Вы можете добавить конструктор сцены следующим образом:

в.ч

@interface HelloWorldLayer : CCLayer {
    int _levelToLoad;
}

+(CCScene *)sceneAtLevel:(int) levelToLoad;

@end

в.м

+(CCScene*) sceneAtLevel:(int) levelToLoad {
    // 'scene' is an autorelease object.
    CCScene *scene = [CCScene node];

    // 'layer' is an autorelease object.
    HelloWorldLayer *layer = [[[HelloWorldLayer alloc] init ] autorelease ];
    layer->_levelToLoad = levelToLoad;

    // add layer as a child to scene
    [scene addChild:layer];

    return scene;
}

// override onEnter

-(void) onEnter {

    [super onEnter];   // dont forget this when overriding any onSomething of cocos2d
    [self loadScene];
}

-(void) loadScene {
    // you can use the iVar _levelToLoad and do your 'load' thing 
    // as function of the level
}

// ps : written for MRC, if you use ARC change the memory stuff.
// pps : not tested, but should be close.
Другие вопросы по тегам