2011-07-09 73 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; 
       } 
      } 

哪個別人給我說,這將解決我原來的問題,這就是如果我放下主指針會被罰款,以及同爲二級指針,但無論被釋放的第一根手指被認爲是輔助指針,但它帶來了另一個問題,我似乎無法找到出於某種原因。早在這裏,這樣的貢獻,但仍然。

我用這段代碼碰到的問題是,如果主指針和輔助指針都關閉,並且其中任何一個都被釋放,它會激活這兩種情況,所以輸出「主向上」和「輔助向上」釋放的第二個將會識別出它是哪一個,如果這兩個例子在我到達那裏之前就關閉了,那麼在那一點上就不重要了。任何想法如何解決這樣的事情?或者另一種方式來做一個遊戲的多點觸控,或者其他任何事情。謝謝!

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