2016年12月14日水曜日

[UWP]忙しい人向けCocos2d-x入門


cocos2d-xの言語はC++です。
タッチイベント・画像配置・アニメーション、音再生などのAPIを使ったサンプルコードを書いたのでメモ。

〇パッケージ一覧 coscos2dの他
 coscos2d::extension (ボタンなどのクラス関連)
 coscos2d::ui(ui関連)
 coscos2d::network(network関連)

〇ソースコードサンプル //----------------------------------
 //Step1.テキストを表示する
 //----------------------------------
 auto hello = Label::createWithTTF("hello world", "Arial", 48);
 hello->setPosition(100, 200);
 this->addChild(hello);

 //----------------------------------
 //Step2.画面に画像を配置する
 //----------------------------------
 //プレイヤー画像作成
 auto player = Sprite::create("images/player.png");
 //プレイヤーを移動
 player->setPosition(Vec2(160, 120));
 //画面に張り付ける
 this->addChild(player);

 //----------------------------------
 //Step3.画像のグルーピング
 //----------------------------------
 Node* fruits = Node::create();
 Sprite* apple = Sprite::create("images/fruit0.png");
 Sprite* grape = Sprite::create("images/fruit1.png");
 Sprite* orange = Sprite::create("images/fruit2.png");
 //タグId付与
 fruits->setTag(9999);
 apple->setTag(1);
 grape->setTag(2);
 orange->setTag(3);
 //子ノード登録
 fruits->addChild(apple);
 fruits->addChild(grape);
 fruits->addChild(orange);
 //各画像の位置設定
 apple->setPosition(Vec2(100, 100));
 grape->setPosition(Vec2(200, 200));
 orange->setPosition(Vec2(300, 30));
 //登録(まとめて登録できる)
 this->addChild(fruits);
 //タグ指定してデータを取り出す
 Node* fruits0 = this->getChildByTag(9999);
 Sprite *fruit0 = (Sprite*)fruits->getChildByTag(1);
 Sprite *fruit1 = (Sprite*)fruits->getChildByTag(2);
 Sprite *fruit2 = (Sprite*)fruits->getChildByTag(3);
 //グループ画像まとめて移動
 fruits0->setPosition(Vec2(50, 50));
〇物理エンジンを使う
 auto scene = Scene::createWithPhysics();
 PhysicsWorld* world = scene->getPhysicsWorld();
 world->setGravity(Vec2(0, -500));
 world->setSpeed(1.0f);
〇2Dアニメやエフェクトを行う
 //特にSpawnクラス(同時の動き)とSequenceクラス(順次の動き)を上手に使うべきです。
 auto scale1 = ScaleTo::create(0.03, 1, 1);
 auto fade1 = FadeTo::create(0.03, 200);
 auto move1 = MoveBy::create(0.03, Vec2(20, 0));
 auto spawn1 = Spawn::create(scale1, fade1, move1, nullptr);

 auto scale2 = ScaleTo::create(0.03, 0.8, 0.6);
 auto fade2 = FadeTo::create(0.03, 50);
 auto move2 = MoveBy::create(0.03, Vec2(-20, 0));
 auto spawn2 = Spawn::create(scale2, fade2, move2, nullptr);

 auto seq = Sequence::create(spawn1, spawn2, nullptr);

 auto scale3 = ScaleTo::create(0.03, 1, 1);
 auto fade3 = FadeTo::create(0.03, 255);
 auto spawn3 = Spawn::create(scale3, fade3, nullptr);

 auto action = Sequence::create(seq, seq, seq, spawn3, nullptr);
 runAction(action);
 this->runAction(Sequence::create(DelayTime::create(1.0f),
  CallFunc::create([this]() {
  //ここで処理を書く
 }),nullptr));


・BGMを鳴らす #include "SimpleAudioEngine.h"
 //音量設定
 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);
 //読込み
 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("bgm.mp3");
 //再生する
 SimpleAudioEngine::sharedEngine()->playBackgroundMusic("bgm.mp3");
 //停止する
 SimpleAudioEngine::sharedEngine()->stopBackgroundMusic("bgm.mp3");
 //一時停止
 SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
 //再開
 SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
 //音楽を先頭に戻す
 SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
 //音量を変更する
 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.4)
 //再生中?
 SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying


・効果音を鳴らす //効果音再生
 int soundId;
 soundId = SimpleAudioEngine::sharedEngine()->playEffect("effect.mp3");
 SimpleAudioEngine::sharedEngine()->pauseEffect(soundId);
 SimpleAudioEngine::sharedEngine()->resumeEffect(soundId);


・動画再生 SimpleVideoEngine::sharedEngine()->playVideo("movie.mp4");

・ローカライズ auto Language = Application::getInstance()->getCurrentLanguage();
 if(Language == LanguageType::JAPANESE);
 ...

・タッチイベント●タッチ開始(指が付いた)時
bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event);
bool onTouchesBegan(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ中に位置が動いた時
onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesMoved(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ終了(指を離した)時
onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesEnded(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ操作キャンセル時
onTouchCancelled(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesCancelled(cocos2d::Touch* touch, cocos2d::Event* event);

参考サイト http://cocos2d-x.org/docs/api-ref/cplusplus/v3x/
 http://osconqsc2015.azurewebsites.net/qsccontent/Cocos/Cocos2dx.html

コメントを投稿

Androider