Memorandum

自分へのメモ。そして誰かの役に立てば、うれしい。

cocos2d-xでゲームを作ろう! 第五回 マップスクロール編

さぁ、今日はいよいよマップをスクロールさせてみたいと思います。

タッチイベントを受けよう!

いままで外部からの入力を全く受け付けなかったのですが、いよいよタッチイベントを受け付けてマップをスクロールさせてみたいと思います。
今のままではタッチイベントを受け付けられないので、まずはタッチイベントを有効にします。

bool HelloWorld::init()
{
    ・・・
    // タッチイベント有効
    this->setTouchMode(kCCTouchesOneByOne);
    this->setTouchEnabled(true);
}

これでタッチイベントを受けることができるようになりました。
さて、タッチイベントは、どこで検知するのでしょう?
タッチイベントを有効にすると、以下のメソッドがコールされるようになります。

//タッチが開始された
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
//タッチが終了した
void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
//タッチしながら移動した
void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
//タッチがキャンセルされた(画面外にでたとか、着信などの割り込みが入ったとか)
void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);

とを記述しておきます。

具体的にはHelloWorldScene.cpp/HelloWorldScene.hに、以下のように記述しておきます。

HelloWorldScene.h

class HelloWorld : public cocos2d::CCLayer
{
    ・・・    
    // タッチイベント
    bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    ・・・    
};

HelloWorldScene.cpp

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    //タッチが開始された時の処理
}

void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
    //タッチが終了した時の処理
}[f:id:Keizi:20130911230745p:plain]

void HelloWorld::ccTouchMoved(CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
    //タッチしながら移動した時の処理
}

void HelloWorld::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
{
    //タッチがキャンセルされた時の処理
}

マップをスクロールさせよう!

さて、マップをどうやってスクロールさせましょうか。
CCTMXTiledMapクラスにsetposition()というメソッドがあります。
マップは左下が基点なので、

pTileMap->setPosition(ccp(0,0))

とやった場合は、以下のように表示されます。

f:id:Keizi:20130911230745p:plain

では、

pTileMap->setPosition(ccp(100,100))

と設定した場合は、
f:id:Keizi:20130911232225p:plain
となります。

タッチイベント位置を取得して、このメソッドをコールすることで、
マップの位置を変更することはできそうです。
でも、スクロールといえば、瞬間移動ではなくてスムーズに動いてこそですよね。
次回は、その辺りに焦点をあてて、説明していきます。