cocos2d チュートリアル [メニュ][スライダー][SimpleAudioEngine][シーンの移動]

昨日、cocos2dのチュートリアルとして良いサイトを見つけたのでさっそくやってみました。 iPhone Game Tutorials

cocos2d以外にもUnity3Dもありそうなのでこれから色々調べていきたいです。

クラスメソッド インスタンスしなくても利用できる。型の前が+。例、+(void) [クラス名 クラスメソッド名]

メニュー

以前、調べたCCMenuのボタンと同じようです。 CCMenuItemImageを使って、CCMenuに追加して、addChildしています。

[cpp]

//ボタンを作成 CCMenuItemImage * startNew = [CCMenuItemImage itemFromNormalImage:@"" selectedImage:@"" target:self selector:@selector(onNewGame)]; //メニューの作成 CCMenu * menu = [CCMenu menuWithItems:startNew,nil]; menu.position = cpp(); [self addChild : nenu];

-(void)onNewGame:(id)sender {

}

[/cpp]

スライダー

CCMenuItemSliderクラスを利用します。 まずは、画面に必要なボタンやスライダーを作成し、配置します。

[cpp]

SimpleAudioEngine *sae = [SimpleAudioEngine sharedEngine];

//スライダーを作成 CCMenuItemSlider * soundSlider = [CCMenuItemSlider itemFromTrackImage:@"" knobImage:@"" target:nil selector:@selector(onMusicSound)];

soundSlider.minValue = 0; soundSlider.maxValue = 100; soundSlider.value = floor(sae.effectiveVolume * 100); soundSlider.position = cpp();

//メニューを作成 CCMenu * menu = [CCMenu menuWithItems:soundSlider,nil]; menu.position = cpp(); [self addChild : nenu];

-(void)onMusicSound:(id)sender{

}

[/cpp]

シーンの移動

Sceneの移動は、CCDirectorのreplaceSceneを利用します。

[cpp]

// sceneが移動したいScene名 [[CCDirector sharedDirector] replaceScene : scene];

[/cpp]

詳しくはこちらの本に載っています。

iPhoneのオモチャ箱 iPhone SDKプログラミング iPhoneのオモチャ箱 iPhone SDKプログラミング 徳井 直生,岡村 浩志,笠谷 真也,深津 貴之,青木 太臣,大宮 聡之,瀬尾 浩二郎,バスケ,宮川 義之  ワークスコーポレーション 売り上げランキング : 131461 Amazonで詳しく見る

今回のチュートリアルでのSceneの移動について

クラスに分かれているのでわかりにくいですが、SceneManagerクラスでSceneの移動を管理しています。 まずは、移動先のレイアーを選択します。

[cpp]

//クラスメソッドで記述している +(void) goPlay {

   CCLayer *layer = [PlayLayer node];  //移動先のLayerを記述、この例だとPlayLayer
   [SceneManager  go: layer];

}

[/cpp]

指定したレイアーで、シーンを作る

[cpp]

+(CCScene )wrap: (CCLayer ) layer { CCScene * newScene = [CCScene node]; [newScene addChild: layer]; return newScene; }

[/cpp]

先ほどのシーンを使いreplaceSceneを使い画面を移動させます。

[cpp]

+(void) go:(CCLayer *) layer {

  CCDirector *director = [CCDirector shareDirector];
  CCScene * newScene = [CCScene wrap:layer];

  //runningScene
  //ディレクターが現在実行しているシーンを返す.
  if([director runningScene]){
        [director replaceScene : newScene];
  }else{
        [director runWithScene:newScene]; //何もSceneを実行していない場合は、newSceneを実行する。
  }

}

[/cpp]

移動が必要な場面で[SceneManager goPlay];と呼び出してあげれば、Sceneが移動します。

SimpleAudioEngineクラス

cocos2dで音を鳴らす時には、「SimpleAudioEngine」クラスを使います。 今回のチュートリアルでも利用されています。

preloadBackgroundMusic このpreloadBackgroundMusicが何のためにあるのかよくわからなかったのですが、公式のCookBookを見ると、playBackgroundMusicを呼ぶ際に使用すると起動時間を削減できるとありました。 何かキャッシュの用な感じです。 最初にpreloadBackgroundMusicで音楽ファイルを指定しておけば、いざplayBackgroundMusicで音楽を素早く鳴らすことができます。

AppDelegate.mのapplicationDidFinishLaunchingに記述すると良いみたいです。

[cpp] //playBackgroundMusicを呼び出す前にpreloadBackgroundMusicを使い音楽ファイルを呼び出します。 [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"music.mp3"];

[[SimpleSudioEngine sharedEngine] playBackgroundMusic:@"music.mp3" loop:YES];

[/cpp]

playEffect

一時的な効果音を出す際に使用します。 壁にぶつかる、ダメージを受ける、アイテムを取得するなどなど

[cpp]

[[SimpleAudioEngine sharedEngine] playEffect:@"button.mp3"];

[/cpp]

詳しくはこちらを参考ください。SimpleAudioEngine