scene移動時に値をバケツリレー再び
今日は一日、WebテスティングサービスとかいうSPIなやつを、
待ち時間に暇だったので、ずーっとチャレンジしてました。
さて本題ですが、以前下記のようなエントリを書いたのですが、
iPhoneアプリ開発講座を受講する その9
http://blacksheep.hatenablog.com/entry/2012/01/18/234120
Scene移動時に値を引きわたす
こいつだと移動先のinitで、バケツリレーした値が使えない。
というわけで、少しいじってみました。
遷移元.m
-(id) init { if( (self=[super init])) { CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64]; CGSize size = [[CCDirector sharedDirector] winSize]; label.position = ccp( size.width /2 , size.height/2 ); [self addChild: label]; CCMenuItemImage *btn = [CCMenuItemImage itemFromNormalImage:@"icon.png" selectedImage:@"icon.png" target:self selector:@selector(doNext)]; [btn setPosition:ccp(240, 80)]; CCMenu *menu = [CCMenu menuWithItems:btn, nil]; [menu setAnchorPoint:ccp(0, 0)]; [menu setPosition:ccp(0, 0)]; [self addChild:menu]; } return self; } - (void) doNext { NSLog(@"HelloWorldLAyer#doNext"); CCScene *scene = [SecondLayer scene:@"遷移するよ"]; CCTransitionFade *transition = [CCTransitionFade transitionWithDuration:1 scene:scene]; [[CCDirector sharedDirector]replaceScene:transition]; }
とまぁ、doNextの中でscene経由で値を渡すとこは一緒。
んで、こんな画面が表示される、
cocos2dのマークのとこがメニューボタンになっているので、
そこを押下すると次画面に遷移する。
遷移先.m
こっちはsceneの中で、layerをinitする時に独自initを呼んで対応。
こうすれば、init内で遷移元から渡ってきた値が使える。
ま、そりゃそうか。
@implementation SecondLayer +(CCScene *) scene:(NSString *)string { NSLog(@"SecondLayer#scene"); CCScene *scene = [CCScene node]; SecondLayer *layer = [[SecondLayer alloc] initWithString:string]; [scene addChild:layer]; [layer release]; return scene; } -(id) initWithString:(NSString*)str { if((self = [super init])){ NSLog(@"SecondLayer#initWithString"); CCLabelTTF *label = [CCLabelTTF labelWithString:str fontName:@"Marker Felt" fontSize:64]; CGSize size = [[CCDirector sharedDirector] winSize]; label.position = ccp( size.width /2 , size.height/2 ); [self addChild: label]; } return self; }
んで、渡ってきた値を画面に表示するところで、終了。
よし、これでいいか。