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))
とやった場合は、以下のように表示されます。
では、
pTileMap->setPosition(ccp(100,100))
と設定した場合は、
となります。
タッチイベント位置を取得して、このメソッドをコールすることで、
マップの位置を変更することはできそうです。
でも、スクロールといえば、瞬間移動ではなくてスムーズに動いてこそですよね。
次回は、その辺りに焦点をあてて、説明していきます。