Cocos2d-x 入門レシピ

  • 117
    Like
  • 0
    Comment
More than 1 year has passed since last update.

クロスプラットフォーム開発を目指し、2DゲームエンジンであるCocos2d-xを試してみた。初めての言語ということもあり、基本的な実装で時間を取られる。なんでよく使う基本的な記述を列挙してみる。 前提条件としてはCocos2d-xをインストールして、新規プロジェクトを作成できたという段階です。またCocos2d-xのバージョンは3.0系での構文になります。(随時更新予定)

参照 : Cocos2d-x 入門レシピ | Kuman Blog

Index

Recipe1. ディレクターを取得したい

Director* director = Director::getInstance();

Recipe2. ログを表示したい

log("YOUR LOG MESSAGE");

Recipe3. 0座標を取得したい

origin = Director::getInstance()->getVisibleOrigin();
log("x = %f, y = %f", origin.x, origin.y);

Recipe4. 画面解像度を取得したい

visibleSize = Director::getInstance()->getVisibleSize();
log("width = %f, height = %f", visibleSize.x, visibleSize.y);

Recipe5. FPSを表示したい

director->setDisplayStats(true); // 画面左下に表示される

Recipe6. FPSを変更したい

director->setAnimationInterval(1.0 / 60); // Default = 1.0 / 60

Recipe7. 定期的にタスクを実行したい。

float duration = 10.0f; // 間隔
schedule(schedule_selector(TestScene::task), duration);

// (下記関数は適切な場所に記述)
void TestScene::task(float dt) {
    log("TestScene task");
}

Recipe8. 画像を表示したい

Sprite* sprite = Tree::create("dog.png");
sprite->setPosition( Point(100, 100) );
this->addChild(sprite, 1); // 第2引数は表示順

Recipe9. 文字列を表示したい

LabelTTF* messageLabel = LabelTTF::create("Cocos2d-x勉強中", "Arial", 16);
messageLabel->setPosition(Point(100,100)); // 表示場所を設定
messageLabel->enableShadow( Size(0,1), 0.9f, 2 ); // シャドウをつける
messageLabel->setColor(Color3B::BLACK); // 文字色を設定
addChild(messageLabel); 

Recipe10. メニューボタン(リンク)を表示したい

// メニューオブジェクト生成
menu = Menu::create(NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, 1);

// メニューアイテム(ボタン)を生成
MenuItemImage *item = MenuItemImage::create(
        "nextButton.png", "nextButtonSelected.png",
        CC_CALLBACK_1(ResultScene::menuNextButtonCallback, this));
item->setPosition(Point( 100, 100 ));
menu->addChild(item);

// コールバック関数 (下記関数は適切な場所に記述)
void TestScene::menuNextButtonCallback(Object* pSender) {
    Scene *scene = ResultScene::scene();
    Director::getInstance()->replaceScene(TransitionFade::create(0.3f, scene));
}

Recipe11. シーンを切り替えたい

Scene *scene = NextScene::scene();
Director::getInstance()->replaceScene(TransitionFade::create(0.3f, scene))

Recipe12. EGLViewを取得したい

EGLView* eglView = EGLView::getInstance();

Recipe13. 背景画像を設定したい

origin = Director::getInstance()->getVisibleOrigin();
visibleSize = Director::getInstance()->getVisibleSize();
Sprite* background = Sprite::create("background.jpg");
background->setPosition(Point(origin.x + visibleSize.width/2, origin.y + visibleSize.height/2));
this->addChild(background, 0);

Recipe14. BGMを鳴らしたい

CocosDenshion::SimpleAudioEngine::getInstance()->setEffectsVolume(1.0);
CocosDenshion::SimpleAudioEngine::getInstance()->setBackgroundMusicVolume(1.0);
CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("bgm.mp3", true);

Recipe15. 効果音を鳴したい

CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound01.mp3");
CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("sound01.mp3");

Recipe16. 画像をアニメーションさせたい

// アニメーション時間
float duration = 1.0f;

// Spriteで画像を表示
Sprite *sprite = Sprite::create("cat.png");
sprite->setPosition(this->getPosition());
this->addChild(sprite, 1); // 第2引数は表示順

// 基本例.1 画像を拡大(縮小)させる
float scale = 1.5f;
ActionInterval* actionScale  = ScaleTo::create(duration, scale);
sprite->runAction(actionScale);

// 基本例.2 画像を回転させる
float rotate = 360;
ActionInterval* actionRotate = RotateBy::create(duration, rotate);
sprite->runAction(actionRotate);

// 基本例.3 ペジェ曲線に沿って移動させる
float x        = this->getPosition().x;
float y        = this->getPosition().y;
float height   = 300;
float width    = 300;
ccBezierConfig bezier;
bezier.controlPoint_1 = Point(x, y);
bezier.controlPoint_2 = Point(x + width/2, y + height * 2);
bezier.endPosition    = Point(x + width, y + height);
ActionInterval* actionBezier = BezierTo::create(duration, bezier);
sprite->runAction(actionBezier);

// 応用例.1 フェイドアウト後、関数を呼び出す
ActionInterval* actionFade   = FadeOut::create(duration);
CallFuncN* callFunction = CallFuncN::create(this, callfuncN_selector(CrashBeanSprite::callbackActionFinished));
Sequence* callAction = Sequence::create(actionFade, callFunction, NULL);
sprite->runAction(callAction);

// (下記関数は適切な場所に記述)
void TestScene::callbackActionFinished(Sprite *sprite) {
}