レッスン3 シーンとメニュー

このレッスンでは, cocos2dがどのようにしてゲームに"シーン"を提供する手助けをするのかと, シーンからシーンへの遷移を学びます. メニューシーンを構築するのに簡単な方法であるCCMenuやそれに関連するクラスの解説も行います. このレッスンは, あなたが既にレッスン1レッスン2を終えていることが前提にされています.

シーン

cocos2dの"シーン"は, 表示される他の全てのノードの親として働く特別な種類のノードです. これはあなたの好みで利用できますが, 典型的な使い方としては, おそらくタイトルページや, ハイスコアリスト, オプションなどゲームの一部のワンシーンを作成するのに利用します. シーンはCCSceneクラスで実装されます.

シーンは, それが表示されていたり, 進行中のアクションを持っているなどであれば"実行中"です. 一度に一つのシーンだけが実行可能です. ただし, 現在のシーンのトップに新たなシーンをプッシュすることが可能です. 現在のシーンを一時停止して, 新しいシーンを実行します. 新しいシーンがポップされると, 最初に実行していたシーンを再開します. または, 新たなシーンに完全に置き換えることもできます. (メモリ使用量を少なくするためには通常この方法が望ましいです)

このシーンのプッシュ/ポップ, または置き換えは, ディレクタ(CCDirector)によって行われます. プロジェクトテンプレート内を既にディレクタを見かけたことがある人もいるでしょう. アプリケーションデリゲート内を見てください. (<プロジェクト名>AppDelegate.mファイル) applicationDidFinishLaunchingメソッドの底部に, 次のようなコードが見つかるはずです.

 
	[[CCDirector sharedDirector] runWithScene: [HelloWorld scene]];
 

これは, 与えられたシーン(HelloWorld)の実行開始をディレクターに通知するためのものです.

ユーザがメニュースクリーンの"プレイ"ボタンをタップしたときや, ゲームが終了してメインメニューに戻りたいときなどに, 新たなシーンに実行を置き換えたいときは, 単にディレクタでreplaceSceneメソッドを呼び出すだけです.

 
	[[CCDirector sharedDirector] replaceScene: [SomeOtherScene scene]];
 

これは, 現在のシーンを終了し, 次のシーンを開始します. replaceSceneを再び呼び出すことで, 最初の(またはその他の)シーンを再実行させることができます.

現在のシーンを単に一時停止させたいなら, replaceSceneメソッドの代わりにpushSceneメソッドを使用します. その後で, 新しいシーンを終了するのにpopSceneメソッドを呼び出して, 以前のシーンを再開します.ただし, この方法では全てのシーンはメモリ内のスタックに格納されます. iPhoneにはメモリ制限があるため, 多用は控えてください.

現在のシーンを一時停止/再開するような, ディレクタが行うことの出来る便利なことが他にもあります. 詳細については, CCDirector?リファレンスを参照してください. (その他のコンテンツについては近日公開予定!)

ファンシートランジション

ファンシートランジションは, CC*Transitionでサポートされています.

 
[[CCDirector sharedDirector] replaceScene:
	 [CCFadeTransition transitionWithDuration:0.5f scene:[SomeOtherScene scene]]];
 

いくつかの共通する遷移があります.

  • CCFadeTransition
  • CCFlipAngularTransition
  • CCShrinkGrowTransition
  • CCMoveInBTransition
  • CCMoveInTTransition
  • CCMoveInLTransition
  • CCMoveInRTransition
  • CCFadeTRTransition
  • CCFadeUpTransition
  • CCFlipXTransition
  • CCFlipYTransition
  • CCPageTurnTransition
  • CCCrossFadeTransition

各遷移タイプの詳細についてはAPIドキュメントを参照してください.

メニュー

メニューは、GUIの概念としてお馴染みの"ボタン"を使用してユーザがあなたのゲームと対話するための1つの方法を提供します. 開発者はしばしばシーンを変更することをディレクターに通知する為にメニューを利用しますが, 他にもメニューにはあなたのゲームを柔軟にコントロールするための便利な方法も提供してくれます.

menu.png

メニューを生成するには, 単にCCMenuのインスタンスを生成するだけです.

 
    CCMenu * myMenu = [CCMenu menuWithItems:nil];
 

これによりメニューアイテム(ボタン)を持たない空のメニューが生成されます. メニューを便利にするには, "メニューアイテム"をメニューに追加する必要があります.

メニューアイテムにはいくつかの種類があります.

  • CCMenuItemAtlasFont?
  • CCMenuItemFont?
  • CCMenuItemImage?
  • CCMenuItemLabel?
  • CCMenuItemSprite?
  • CCMenuItemToggle?

個々のメニューアイテムの種類による微妙な違いですが, 基本的にはボタンがタッチされた時に指定したターゲットに対してセレクタが呼び出されるものです. 最もシンプルなメニューアイテムの一つに, 指定された画像を"ヒット領域"として利用するMenuItemImageがあります.

 
    CCMenuItemImage *menuItem1 =[CCMenuItemImage itemFromNormalImage:@"myFirstButton.png"
                selectedImage: @"myFirstButton_selected.png"
                target:self
                selector:@selector(doSomething)];
 
  • itemFromNormalImageでメニューアイテムとして使用したいイメージを指定する
  • selectorImageでボタンが押された時に使用するためのイメージを指定する
  • targetでメニューアイテムが押された時に応答するオブジェクトを指定する
  • seelctorで呼び出されるターゲットメソッドを指定する

注意: @selector(doSomething)と@selector(doSomething:)は違います. (余分なコロンに注意してください) コロン付では, menuItemがメソッドに渡されます. 呼び出されたメソッドに追加データを渡したいときに便利です. 例えば, どのように進めるかを決定するためにメニューアイテム"タグ"を利用することが出来ます. doSomethingメソッド内でアクセス可能な追加情報を格納するためにMenuItemTypeのサブクラス化を選択することもできます.

一度メニューアイテムが作成された場合, CCNodeに"なにか"を追加するのと同じ方法でメニューにアイテムを追加することが出来ます.

 
    [myMenu addChild:menuItem1];
 

また, 次のようにmenuWithItemsのコンストラクタを変更することによって, 一度に複数のメニューアイテムをメニューに追加することもできます. (最後にnilを付けるのを忘れないこと)

 
    CCMenu *myMenu = [CCMenu menuWithItems:menuItem1, menuItem2, menuItem2, nil];
 

"alignItemsVertically"や"alignItemsInRows"のような, メニューレイアウトのためのいくつかの便利なメソッドも提供されています.

 
    [myMenu alignItemsVertically];
 

メニューの作成過程をまとめると次のようになります.

 
// メニューアイテムの作成
CCMenuItemImage * menuItem1 =[CCMenuItemImage itemFromNormalImage:@"myFirstButton.png"
                selectedImage: @"myFirstButton_selected.png"
                target:self
                selector:@selector(doSomething:)];
 
CCMenuItemImage * menuItem2 =[CCMenuItemImage itemFromNormalImage:@"mySecondButton.png"
                 selectedImage: @"mySecondButton_selected.png"
                 target:self
                 selector:@selector(doSomething:)];
 
 
CCMenuItemImage * menuItem3 =[CCMenuItemImage itemFromNormalImage:@"myThirdButton.png"
                  selectedImage: @"myThirdButton_selected.png"
                  target:self
                  selector:@selector(doSomething:)]; 
 
 
// メニューを作成してアイテムを追加する
CCMenu * myMenu = [CCMenu menuWithItems:menuItem1, menuItem2, menuItem3, nil];
 
// メニューアイテムを垂直方向に配置する
[myMenu alignItemsVertically];
 
// メニューをシーンに追加する
[self addChild:myMenu];
 

メニューの詳細とその使用方法については, CCMenuドキュメントを参照してください.



添付ファイル: filemenu.png 663件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-24 (日) 17:14:27 (2528d)