2013年7月17日水曜日

[cocos2d-iphone]cocos2dの基本コンセプト (公式wiki和訳)

cocos2dの公式サイトに乗ってる、「Basic Concept」が、cocos2d学ぶ上であんなに役に立つのに日本語訳がなさげなので、ピニャコラーダ飲みながら和訳してみた。
気分が乗り次第他のページも和訳していく予定。

元記事:prog_guide:basic_concepts – cocos2d for iPhone


以下翻訳

cocos2d 基本コンセプト

cocos2dで開発をする上で、いくつかのコンセプトを理解しておく必要がある。

  • シーン(Scenes)
  • ディレクター(Director)
  • レイヤー(Layers)
  • スプライト(Sprites)

Layers

Scene(CCSceneオブジェクトで実装)は、Appの遷移のを表現する一部品である。人によっては、「スクリーン」や、「ステージ」のほうがしっくりくるかもしれない。
Appは複数のSceneを持つことができるが、同時にひとつのSceneしか表示することができない。

例:あなたが作ったゲームは、次のようなSceneから構成されるかもしれない:イントロ画面、メニュー画面、第1ステージ、第1カットシーン、第2ステージ、勝利カットシーン、敗北カットシーン、ハイスコア画面。

これらの画面・カットシーンは、それぞれSceneとして定義できる。お互いの間に若干のデータ受け渡し・ロジック等は発生するが、おおまかには独立していると言えるだろう。



cocos2dの CCScene は、1つ以上の重なりあったLayer(CCLayerオブジェクトで実装)から構成される。Layerは、見た目と挙動をSceneに与える。
通常は、必要なLayerだけでSceneを構成することになるだろう。

CCSceneファミリーのなかには、SceneとSceneの遷移(フェードイン・フェードアウト、スライド、などなど)を表現してくれる、Transitionと呼ばれるものもある(CCTransitionSceneオブジェクトで実装)。

SceneはCCNodeのサブクラスなので、手動もしくはactionででも操作できる。詳しくは、「Actions(和訳予定)」を参考に。

Director

CCDirectorは、SceneからSceneへの遷移を担当するコンポーネントである。

CCDirectorは、シングルトンなオブジェクトだ。どのSceneが現在表示されているかを管理し、SceneのStackももっており、様々な "Scene Call"(新しいSceneをPushしてそれを表示している間、最初に表示されていたLayerは停止している、等)を可能にしている。

CCSceneがSceneのPush, Replaceを要求した時に、実際にそれを実行するのがCCDirectorである。

OpenGL ESの初期化もまた、CCDirectorの仕事である。

Layers

CCLayerは、描画エリア(画面いっぱい)と同じサイズを持っており、自身を描画するための情報が入ってる。
透過も対応しているので、背後のLayerが見えることもある。
Layerには、見た目と挙動を定義しているので、ほとんどのプログラミングはCCLayerのサブクラスの実装になるだろう。



CCLayerは、イベントのハンドラーが定義されている場所です。
イベントは、いずれかのLayerが受け取るまで(手前のLayerから背後のLayerへと)通知されます
(訳注:Fix Meのアイコンがあったので、間違ってるかも。)

マジなAppの場合、カスタムなCCLayerをプログラミングすることが要求されるが、cocos2dはある程度便利なCCLayerを提供している(シンプルなメニューのCCMenu、色レイヤーのCCLayerColor、CCLayerを切り替えできるマルチプレクサーのCCLayerMultiplex、などなど)。

Layerは、CCSpriteオブジェクト、CCLabelオブジェクト、そして他のCCLayerオブジェクトも子として含むことができる。

LayerはCCNodeのサブクラスなので、手動もしくはactionででも操作できる。詳しくは、「Actions(和訳予定)」を参考に。

Sprites

cocos2dのSpriteは、いわゆる普通のスプライトである。2Dの画像で、移動・回転・拡大縮小・アニメーションさせることができる。

Sprite(CCSpriteオブジェクトで実装)は、他のSpriteを子として含むことができる。
親を変移動・変形すると、子も同じように移動・変形します。

SpriteはCCNodeのサブクラスなので、手動もしくはactionででも操作できる。詳しくは、「Actions(和訳予定)」を参考に。