水色ノート

技術力の無さに焦っているにわかAppleファンのゲームプログラマが書くブログです。

Cocos2d-xでスプライトのタッチ判定

Cocos2d-xで簡単なゲームアプリを作ってます。
うっかりRomancing Saga2にハマってしまったせいで、ただでさえ自分の時間が少ないのにさらに時間が取られてしまい全然開発が進んでいません。


ようやく「画面タッチ判定作ってみるか」というところに来て試しに実装してみました。

適当にググって見つかった以下のような方法で一度実装しました。

うまくいかなかった処理
    void HogeHogeScene::onTouchEnded(Touch* touch, Event* event)
    {
        Point touchPoint = Point(touch->getLocationInView().x, touch->getLocationInView().y);
        
        for (int i = 0; i < SPRITE_MAX; i ++) {
            Rect targetBox = m_sprite[i]->getBoundingBox();
            
            if (targetBox.containsPoint(touchPoint)) {
                // i 番目のスプライトがタッチされた時の処理
            }
        }
    }

なんとなく反応してるんだけど微妙にずれるんですよね。

直した処理
    void HogeHogeScene::onTouchEnded(Touch* touch, Event* event)
    {
//        Point touchPoint = Point(touch->getLocationInView().x, touch->getLocationInView().y);
        Point touchPoint = Point(touch->getLocationInView().x, SCREEN_HEIGHT - touch->getLocationInView().y);
        
        for (int i = 0; i < SPRITE_MAX; i ++) {
            Rect targetBox = m_sprite[i]->getBoundingBox();
            
            if (targetBox.containsPoint(touchPoint)) {
                // i 番目のスプライトがタッチされた時の処理
            }
        }
    }

Y軸の向きを反対にしてみたら正しくとれました。
ググってHITした記事ではこんなことしてなかったのになぁ・・・なんでだろう。