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