2015年

2月

05日

Cocos2d-x Ver 3.x C++ 音を出してみる

Cocos2dx 3.x C++言語

TopAudioScene.hを次のように変更してみてください。

#ifndef __Audio__TopAudioScene__

#define __Audio__TopAudioScene__


#include <cocos2d.h>


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


class TopAudioScene : public Layer

{

    

public:

    

    // 初期化のメソッド

    virtual bool init();

    

    

    static cocos2d::Scene* createScene();

    

    //タッチイベント用メソッドの宣言

    //TouchBegan()関数->タッチ開始

    bool onTouchBegan(Touch* pTouch, Event* pEvent);

    

    //TouchMoved()関数->タッチ中

    void onTouchMoved(Touch *pTouch, Event *pEvent);

    

    //TouchCancelled()関数->タッチキャンセル

    void onTouchCancelled(Touch *pTouch, Event *pEvent);

    

    //TouchEnded()関数->タッチ終了

    void onTouchEnded(Touch* pTouch, Event* pEvent);

    

    // create()を使えるようにしている。

    CREATE_FUNC(TopAudioScene);

};



#endif /* defined(__Audio__TopAudioScene__) */

 

※重要

public内にタッチイベント用にそれぞれメソッドの宣言をする必要があります。


public:

    //タッチイベント用メソッドの宣言

    //TouchBegan()関数->タッチ開始

    bool onTouchBegan(Touch* pTouch, Event* pEvent);

    

    //TouchMoved()関数->タッチ中

    void onTouchMoved(Touch *pTouch, Event *pEvent);

    

    //TouchCancelled()関数->タッチキャンセル

    void onTouchCancelled(Touch *pTouch, Event *pEvent);

    

    //TouchEnded()関数->タッチ終了

    void onTouchEnded(Touch* pTouch, Event* pEvent);

 

TopAudioScene.cppを次のように変更してみてください。

#include "TopAudioScene.h"

//音をならすためにinclude

#include "SimpleAudioEngine.h"


// 名前空間 #define USING_NS_CC using namespace cocos2d

USING_NS_CC;


Scene* TopAudioScene::createScene()

{

    // 「シーン」は自動解放オブジェクトです

    auto scene = Scene::create();

    

    // 「レイアウト」は自動解放オブジェクトです

    auto layer = TopAudioScene::create();

    

    // シーンに子としてレイヤーを追加

    scene->addChild(layer);

    

    // シーンを返す

    return scene;

}



// INIT」初期化

bool TopAudioScene::init()

{

    if ( !Layer::init() )

    {

        return false;

    }

    

    // 画面サイズを取得

    Size winSize = Director::getInstance()->getVisibleSize();

    

    // バックグランドカラー

    auto background = LayerColor::create(Color4B::BLUE,

                                         winSize.width,

                                         winSize.height);

    

    // ラベルを生成

    Label* label1 = Label::createWithSystemFont

                 ("     Cocos2d-x     \nタップで音が鳴る", "Arial", 100);

    

    // ラベルの設置

    label1->setPosition(Point(winSize.width / 2 ,winSize.height / 2));

    

    // ラベルタイトルを追加

    this->addChild(label1,1);

    

    // バックグランドカラー 第2引数は表示順

    this->addChild(background, 0);

 

    //init()

    //あらかじめ、音楽データを読み込む

    CocosDenshion::SimpleAudioEngine::

        getInstance()->setBackgroundMusicVolume(0.5f);

 

    CocosDenshion::SimpleAudioEngine::

        getInstance()->preloadBackgroundMusic("onepoint26.mp3");

    

    // 3.x系 タップイベントを取得する

    // シングルタッチモード

    auto listener = EventListenerTouchOneByOne::create();

    listener->onTouchBegan = CC_CALLBACK_2(TopAudioScene::onTouchBegan, this);

    listener->onTouchMoved = CC_CALLBACK_2(TopAudioScene::onTouchMoved, this);

    listener->onTouchCancelled =

                         CC_CALLBACK_2(TopAudioScene::onTouchCancelled, this);

    listener->onTouchEnded = CC_CALLBACK_2(TopAudioScene::onTouchEnded, this);

    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority

                                                             (listener, this);


    return true;

}


//タッチ開始イベント

bool TopAudioScene::onTouchBegan(Touch *pTouch, Event *pEvent)

{

    CCLOG("タップ開始!");

    

    //音楽を再生する

    CocosDenshion::SimpleAudioEngine::

             getInstance()->playBackgroundMusic("onepoint26.mp3");

    

    return true;

}


//タッチ移動イベント

void TopAudioScene::onTouchMoved(Touch *pTouch, Event *pEvent)

{

    CCLOG("タップ中");

    

    // 効果音を鳴らす

    CocosDenshion::SimpleAudioEngine::

             getInstance()->playEffect("onepoint26.mp3");

}


//タッチキャンセルイベント

void TopAudioScene::onTouchCancelled(Touch *pTouch, Event *pEvent)

{

    CCLOG("タップキャンセル");

    

}


//タッチ終了イベント

void TopAudioScene::onTouchEnded(Touch *pTouch, Event *pEvent)

{

    CCLOG("タップ終了!");

}

 

※重要

cocos2dxでは、音を簡単に鳴らすことができます。
その際に利用するのが、SimpleAudioEngineクラスです。

音を鳴らすためにはオーディオ用のクラスを#includeしておくことが必要です。

 

//音をならすためにinclude

#include "SimpleAudioEngine.h"

 

あらかじめ、音楽データを読み込まなくても再生できますが、メモリーの負荷が高まる、また再生が遅れるなど起る場合があります。
ですので、preloadBackgroundMusic()を利用した方がいいでしょう。

GitHub Audio_Cocos2d-x


 

目 次