Cocos2d-x Androidでマルチタップを無効にする

Cocos2d-xでシングルタップの判定を行うときはEventListenerTouchOneByOneを使いますが、何故かAndroidではこれを使ってもマルチタップができてしまうので、これを無効にする方法です。

今回使用したバージョン

  • Cocos2d-x 3.9

ググってみると、2つの方法が見つかりました。

Cocos2d-xのコードに手を入れて、プロジェクト全体をマルチタップ無効にする方法
http://discuss.cocos2d-x.org/t/disabling-multitouch-in-android/9649/3

Cocos2dxGLSurfaceView.javaクラスの218行目付近でMotionEvent.ACTION_POINTER_DOWNの部分をコメントアウトすればいいようです。

        switch (pMotionEvent.getAction() & MotionEvent.ACTION_MASK) {
            /*
            case MotionEvent.ACTION_POINTER_DOWN:
                final int indexPointerDown = pMotionEvent.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
                final int idPointerDown = pMotionEvent.getPointerId(indexPointerDown);
                final float xPointerDown = pMotionEvent.getX(indexPointerDown);
                final float yPointerDown = pMotionEvent.getY(indexPointerDown);

                this.queueEvent(new Runnable() {
                    @Override
                    public void run() {
                        Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleActionDown(idPointerDown, xPointerDown, yPointerDown);
                    }
                });
                break;
            */

            case MotionEvent.ACTION_DOWN:
                // there are only one finger on the screen
                final int idDown = pMotionEvent.getPointerId(0);
                final float xDown = xs[0];
                final float yDown = ys[0];

                this.queueEvent(new Runnable() {
                    @Override
                    public void run() {
                        Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleActionDown(idDown, xDown, yDown);
                    }
                });
                break;


イベントリスナー毎に変数を用意して制御する方法
もうひとつの方法は、タッチIDを記録しておく方法のようです。
http://stackoverflow.com/questions/25322900/how-to-disable-multitouch-in-android-in-cocos2d-x-3-2