2011-07-09 6 views
0

これは特にゲームプログラミングのものではないので、私はここで尋ねています。基本的に、私はこのコードを持っている:マルチタッチゲームのコントロールandroid

for (int i = 0; i < event.getPointerCount(); i++) { 
       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_DOWN: 
       case MotionEvent.ACTION_POINTER_DOWN: 
        if(event.getPointerId(i) == 0) 
        { 
         Log.d("Game", "Primary Down"); 
        } 
        else if(event.getPointerId(i) == 1) 
        { 
         Log.d("Game", "Secondary Down"); 
        } 
        break; 

       case MotionEvent.ACTION_UP: 
       case MotionEvent.ACTION_POINTER_UP: 
        if(event.getPointerId(i) == 0) 
        { 
         Log.d("Game", "Primary Up"); 
        } 
        else if(event.getPointerId(i) == 1) 
        { 
         Log.d("Game", "Secondary Up"); 
        }      
        break; 
       } 
      } 

他の誰かが、それは私が主ポインタを置くならば、それは罰金、および二次ポインタで同じだろうということでした私のオリジナル問題を修正することを言ってくれたが、何でもどの解放された最初の指は2次ポインタと見なされますが、別の問題が発生します。これは何らかの理由で把握できないようです。ここでは初期のものなので、貢献していますが、それでも。

私がこのコードで遭遇した問題は、プライマリおよびセカンダリポインタが両方ともダウンし、いずれかがリリースされた場合、両方のケースをアクティブにするので、「プライマリアップ」と「セカンダリアップ」の両方が出力され、私がそこに着く前に両方のケースが消えてしまえば、その時点でそれは問題ではないでしょう。どのようにこのような何かを修正するための任意のアイデア?ゲームのためにマルチタッチをする別の方法、またはそのようなことについては何か。ありがとう!

WWaldo私の知る限りでは

答えて

1

、ACTION_UPとACTION_POINTER_UP(XX_DOWN用と同じ...)が唯一の各ポインタのために、一度呼び出されます。したがって、特別な扱いをする必要はありません。単にevent.getX()とevent.getY()を使用してください。対応pointerIdを取得するには、

int index = event.getActionIndex(); 
int pointerId = event.getPointerId(index); 

私はforループを使用する唯一の時間は、ポインタが移動しているとは独立と呼ばれるACTION_MOVEイベント、のためである(その場合には、あなたが実際にpointerIdを使用する必要が使用する必要があります、のgetX(i)とのgetY(i))を

編集:getActionIndexだけAPI 8で追加されましたので、あなたは、アクションのインデックスを取得するために

event.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT 

を使用する場合があります。

+0

あなたは私がforループを取り出して、if文であなたの答えにあるpointerId変数をチェックしていると言っていますか? – WWaldo

+0

イムを推測しています。今は完璧に動作しているので、ありがとうございます! – WWaldo

関連する問題