【Cocos2d-x】複数画像のタッチ判定

【Cocos2d-x】複数画像のタッチ判定

今回は複数の画像から、どの画像をタッチしたかの判定を行い、その画像を消去するということをやります。
まずはこちらの画像をダウンロードして、プロジェクトに追加して下さい。

ヘッダーに画像格納用の配列と、画像上滋養のメッドを用意します。

    void setUpItems();
    
    Vector<Sprite*> _items;

setUpItems()を以下のように実装していきます。

void HelloWorld::setUpItems() {
    Size winSize = Director::getInstance()->getWinSize();
    
    //30個の画像を画面上のランダムな位置に表示して配列に格納
    for (int i = 0; i < 30; i ++) {
        Sprite *item = Sprite::create("item.png");
        int px = rand() % (int)winSize.width;
        int py = rand() % (int)winSize.height;
        item->setPosition(Vec2(px, py));
        this->addChild(item);
        
        _items.pushBack(item);
    }
    
}

タッチを検知した時に、画像がタッチされたかを検知して、画像がタッチされていた場合は画像を消します。

void HelloWorld::onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent) {
    Vec2 location = pTouch->getLocation();
    
    for (int i = 0; i < (int)_items.size(); i ++) {
        Sprite *item = _items.at(i);
        Rect spriteRect = Rect(item->getPosition().x - item->getContentSize().width/2,
                               item->getPosition().y - item->getContentSize().width/2,
                               item->getContentSize().width,
                               item->getContentSize().height);
        if (spriteRect.containsPoint(location)) {
            item->removeFromParent();
            _items.erase(i);
            i --;
        }
    }
    
}

起動時は画像が30個ありますが、
beginner12-1

 

タッチしていくと、どんどん減っていきます。
beginner12-2

今回は以上です。

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

CAPTCHA