サイトのトップへ戻る

Cocos2d-x ドキュメント 日本語訳

サイト内検索

Scenesの構築と遷移



Sceneとは何か?

Scene とは ゲームに必要なSprites, Labels, Nodes,その他オブジェクトを保持するコンテナです。 Scene はゲームロジックの実行とフレームごとのコンテンツの描写を司ります。 ゲームを開始するには少なくとも一つのSceneが必要です。 これは映画のようなものだと考えることができます。 Scene はゲーム中ずっと動作をし続け、起こっていることをリアルタイムにユーザーに表示します。 ゲームでは望む数のScene オブジェクトを作成し、それらを簡単に切り替えることができます。 Cocos2d-x ではscene 切り替えが実装されており、クールなエフェクトと共にscene 切り替えを行うことさえできます。



Sceneを作成する

Sceneを作成するのはとても簡単です。

auto myScene = Scene::create();


Scene Graphを覚えていますか?

このガイドの第二章 で、scene graph とそれがゲーム描写にどのような影響を与えるかについて学びました。 覚えておくべき重要なことは、scene graphによってGUI要素の描写順番が決まるということです。 また、 z-orderについても忘れないでください!



簡単な Scene

それでは、簡単な Sceneを構築してみましょう。 Cocos2d-x は右手系座標系を使用していることを忘れないでください つまり、 0,0 座標は画面/ディスプレイの左下隅の位置にあるということです。 ゲーム中に何かを配置する時は、ここが位置計算の開始点となります。 それでは、簡単なSceneを作成してそれにいくつか要素を追加してみましょう:

auto dirs = Director::getInstance();
Size visibleSize = dirs->getVisibleSize();

auto myScene = Scene::create();

auto label1 = Label::createWithTTF("My Game", "Marker Felt.ttf", 36);
label1->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));

myScene->addChild(label1);

auto sprite1 = Sprite::create("mysprite.png");
sprite1->setPosition(Vec2(100, 100));

myScene->addChild(sprite1);

When このコードを実行すると、LabelSpriteの入った簡単なSceneが表示されるでしょう。 あまり多くのことは行っていませんが、最初の一歩には十分です。



Scene間の切り替え

ゲームにおいてはSceneオブジェクト間の移動が必要かもしれません。 おそらくゲーム開始、ステージの変更、ゲームのエンディングなどの画面で。 Cocos2d-x scene 切り替えのためのいくつかの方法が用意されています。



Scene間で切り替えを行う方法

scenesを切り替える方法はたくさんあります。 各方法はそれぞれ特徴的な機能を持っています。それでは、それらについて見てみましょう。:

auto myScene = Scene::create();

runWithScene() - 最初の scene でのみこれを使用します。これはあなたのゲームの最初の Sceneを開始する方法です。

Director::getInstance()->runWithScene(myScene);

replaceScene() - scene を即座に置き換えます。

Director::getInstance()->replaceScene(myScene);

pushScene() - 実行中の sceneのを中断し、それを中断sceneのスタックに入れます。実行中のscene がある場合のみこれを実行します。

Director::getInstance()->pushScene(myScene);

popScene() - このscene と実行中のscene を置き換えます。実行中の scene は削除されます。実行中のscene がある場合のみこれを実行します。

Director::getInstance()->popScene(myScene);


エフェクト付きでの Scenes 切り替え

Scene 切り替えに視覚的なエフェクトを追加することができます。

auto myScene = Scene::create();

// Transition Fade
Director::getInstance()->replaceScene(TransitionFade::create(0.5, myScene, Color3B(0,255,255)));

// FlipX
Director::getInstance()->replaceScene(TransitionFlipX::create(2, myScene));

// Transition Slide In
Director::getInstance()->replaceScene(TransitionSlideInT::create(1, myScene) );