Lab

Cocos2d-x:シングルタッチを受け付ける

 Tag :  Published : 2013-10-9

Pocket

ccTouchBegan、ccTouchMoved、ccTouchEndedを使用します。
画面のタッチ開始/タッチ中/タッチ終了それぞれの状態を確認する事ができます。
また、タッチした位置を座標で取得します。
> Ver3.x : 『シングルタッチを受け付ける』はこちら

1.関数の宣言

デフォルトで作成されるHelloWorldクラスを利用した例です。

HelloWorldScene.h :

class HelloWorld : public cocos2d::CCLayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();
    CREATE_FUNC(HelloWorld);
    
    //ccTouchBegan()関数->タッチ開始
    virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    //ccTouchMoved()関数->タッチ中
    virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    //ccTouchEnded()関数->タッチ終了
    virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
};
    

2.タッチを有効にする

タッチを受け付けるように設定します。

HelloWorldScene.cpp :

bool HelloWorld::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }
    
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    CCSprite* pBg = CCSprite::create("background.png");
    pBg->setPosition(ccp(size.width/2, size.height/2));
    this->addChild(pBg);
    
    //シングルタッチを受け付ける
    this->setTouchMode(kCCTouchesOneByOne);
    
    //タッチを有効にする
    this->setTouchEnabled(true);
    
    return true;
}
    

3.タッチイベント時の処理

タップ開始時、タップ中、タップ終了時にそれぞれメッセージが出るようにします。

HelloWorldScene.cpp :

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLog("タップ開始!");
    return true;
}

void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLog("タップ中");
}

void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLog("タップ終了!");
}
    

4.タッチした座標を取得する

タップした位置を座標で取得して、ログで出力します。
ccTouchBeganの内容を、以下の用に書き換えます。

HelloWorldScene.cpp :

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    CCPoint loc = pTouch->getLocation();
    CCLog("x座標:%f y座標:%f", loc.x, loc.y);
    
    return true;
}