Lab

Cocos2d-x v3:スプライトのタップ

 Tag :  Published : 2014-8-23

Pocket

スプライトがタップされたかどうか調べます。

タップした位置にスプライトがあるか調べる

スプライトをタップした際、そのタグがログで表示されるようにします。

1.シングルタップを受け付ける
2.タッチした位置と、スプライトのエリアをそれぞれ取得する
3.タッチした位置が、スプライトのエリア内に収まっていればログを返す。

以上、3つの工程を行っています。
工程1に関しては、『シングルタッチを受け付ける』をご覧ください。

    //スプライトを作成
    Size s = Director::getInstance()->getVisibleSize();
    auto spr = Sprite::create("1.png");
    spr->setPosition(Vec2(s.width/2, s.height/2));
    spr->setTag(100);
    addChild(spr);

    //イベントリスナーを作成
    auto listener = EventListenerTouchOneByOne::create();

    //タッチ開始
    listener->onTouchBegan = [](Touch* touch, Event* event){
        //target : ターゲットのスプライト
        auto target = (Sprite*)event->getCurrentTarget();
        
        //targetBox : タッチされたスプライトの領域
        Rect targetBox = target->getBoundingBox();

        //touchPoint : タッチされた場所
        Point touchPoint = Vec2(touch->getLocationInView().x, touch->getLocationInView().y);

        //touchPointがtargetBoxの中に含まれているか判定
        if (targetBox.containsPoint(touchPoint))
        {
            log("タグは%dです", target->getTag());
            return true;
        }
        
        return false;
    };
    
    //イベントリスナーを登録
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, spr);
    

pageTop