2012-02-13 51 views
2

我是一名經驗豐富的程序員,正嘗試進入Android遊戲設計領域。 在Eclipse中使用Java。Android Java - 跟蹤多點觸控對象/事件?

有關於如何通過移動在整個屏幕上跟蹤觸摸單個對象的bazillion教程,但如何跟蹤上隨機屏幕上的許多單個對象的觸摸事件?

對於初學者,我想編寫一個類,它將被實例化多次並保存在一個數組列表中。每個都被繪製到全屏幕SurfaceView上的隨機位置。簡單的東西到目前爲止...... 但是對於我的生活,我無法找到如何拖動這些對象周圍的任何!

我有一個使用自定義視圖(擴展SurfaceView)的活動。實例化處理遊戲板屏幕繪圖的GameBoard類。 GameBoard類還擁有/繪製了一個在屏幕上可以很好地繪製的gameCharacters的ArrayList,但需要觸摸控制。

林在我的智慧結束,任何幫助嗎?

回答

0

我寫了一個自上而下的射手(Akari),它不會拖動物體,而是使用它們的位置進行碰撞檢測。

在我的SurfaceView中,我調用theThread.touchEventType(x,y)。線程遍歷對象(在你的情況下,數組),並檢查它們是否匹配。在匹配的情況下,它將返回與該對象關聯的值,並且在該對象上完成MotionEvent.ACTION_UP之前的所有MotionEvent.ACTION_MOVEMENT動作。

希望這會有所幫助。如果你需要任何示例代碼,請告訴我。

+0

人力資源管理模式,似乎低效的遍歷所有的「可觸摸」的對象來檢查衝突(或任何事件)...但它似乎是在Android的世界所做的那樣的。 – Overunity 2012-02-13 05:54:26

+0

環顧四周後,似乎是這樣做的。如果不需要準確的精度,我強烈建議使用Android的Rect類進行檢測。 – YumeApps 2012-02-13 06:37:01

0

我的問題與您的問題完全相同。 我的解決方案有點不同。我正在嘗試編寫一個backammon遊戲。我有30個物體放置在屏幕上並移動它們。當然,其中一些重疊。所以我的問題是我觸摸了一個物體,最後移動了另一個物體(從我認爲這是一個物體放置在屏幕上後,我觸摸的那個和我觸摸的那個物體的左側)。

不管怎樣,我所做的就是創建一個擴展視圖中的自定義對象並將其放在GestureOverlayView。我覆蓋的onTouchEvent(),它看起來是這樣的:

public boolean onTouchEvent(MotionEvent event) { 
    int x = (int) event.getRawX(); 
    int y = (int) event.getRawY(); 

    int action = event.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      if (Math.abs(x - this.getX()) < BackgroundView.slotSize && Math.abs(y - this.getY()) < BackgroundView.slotSize) { 
       //do whatever I want 
       return true; 
      } else { 
       return false; 
      } 
      //break; 
     case MotionEvent.ACTION_MOVE: 
      //this is the dragging part 
      this.setX(x - size/2); 
      this.setY(y - size/2); 
      break; 
     case MotionEvent.ACTION_ 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
     case MotionEvent.ACTION_OUTSIDE: 
      break; 
     default: 
    } 
    return true; 
} 

從我讀,當我返回false,動作不消耗,所以另一個對象可以做到這一點。基本上,沒有任何對象會消耗它,直到通過返回true來消除它。

我仍然認爲我是一個新手,我覺得有更好的方法可以做到這一點,但它的工作原理很適合我。希望能幫助到你。你或別人。 我接受新的建議。