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.