@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

iPhoneアプリ開発講座を受講する その9

Scene移動時に値を引きわたす

方法はいくつかあると思うが、一番簡単そうな方法はこれかな。
Scene経由のバケツリレー方式。

Scene移動先の.h

sceneの引数でバケツリレー。

@interface SecondLayer : CCLayer {
    CCLabelTTF *label_;
}
+(CCScene *) scene:(NSString*)str;
-(void)setLabelString:(NSString*)str;
@end

Scene移動後の.m

バケツリレーして、ラベルにぺたぺた。

+(CCScene *) scene:(NSString*)str
{
    CCScene *scene = [CCScene node];
    SecondLayer *layer = [SecondLayer node];
    [layer setLabelString:str];
    [scene addChild: layer];
    return scene;
}
-(void)setLabelString:(NSString*)str
{
    [label_ setString:str];
}

Scene移動元の.m

移動先のHogeLayerにHogeって文字を渡したる。
CCTransitionFadeは移動する際に少しカッコつけてみた。

-(void)doHoge
{
    CCScene *scnen = [HogeLayer scene:@"hoge"];
    CCTransitionFade *fade = [CCTransitionFade transitionWithDuration:1 scene:scnen];
    [[CCDirector sharedDirector] replaceScene:fade];
}

フォント

AppDelegate.m

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
    ...省略...
    //font
    [[FontManager sharedManager] loadFont:@"font/Sansation_Regular.ttf"];	
    // Run the intro Scene
    [[CCDirector sharedDirector] runWithScene: [HelloWorldLayer scene]];
}

XXXXLayer.m

-(void) init
{
    CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"font/Sansation_Regular" fontSize:64];
}

サウンド

AppDelegate.m

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
    ...省略...
    //sound preload
    [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"sound/bgm.wav"];
    [[SimpleAudioEngine sharedEngine] preloadEffect:@"sound/se.wav"];
    // Run the intro Scene
    [[CCDirector sharedDirector] runWithScene: [HelloWorldLayer scene]];
}

XXXXLayer.m

-(void) init
{
    //サウンドを鳴らす
    [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"sound/bgm.wav" loop:YES];
}
-(void)doNext
{
    [[SimpleAudioEngine sharedEngine] playEffect:@"sound/se.wav"];
}