我正在做一個簡單的遊戲,玩家在屏幕上繪製形狀。路徑的點存儲在一個數組中,並繪製在GameLoop類中。我差不多完成了,但現在我意識到我應該通過多點觸摸輸入來完成遊戲,以允許兩個玩家同時繪製形狀!不知道如何處理多點觸摸
我知道我需要爲第一根手指使用event.Action_Down
,爲下一根手指使用event.Action_Pointer_Down
,但是如何處理所有形狀的點和路徑圖?我仍然可以只使用一個數組,或者我需要每個數組。感覺我需要將我的GameLoop類中的所有代碼加倍以檢查兩個路徑?我的問題可能有點不清楚,但是我現在的感受!一些建議會很好!
這是我如何處理單點觸摸事件,並通過所有指向數組代碼:
@Override
public boolean onTouch(View v, MotionEvent event) {
synchronized (gameLoop) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
gameLoop.touchDownX = event.getX();
gameLoop.touchDownY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
Point point = new Point();
point.x = (int) event.getX();
point.y = (int) event.getY();
gameLoop.addPoints(point);
gameLoop.startDrawLine = true;
break;
case MotionEvent.ACTION_UP:
Point point2 = new Point();
point2.x = (int) gameLoop.touchDownX;
point2.y = (int) gameLoop.touchDownY;
gameLoop.addPoints(point2); // Add last point to close shape
gameLoop.pathOK = true;
gameLoop.touchActionUp = true;
break;
}
}
return true;
}
編輯: 這很複雜!我發現了一些我修改了一些的代碼。我需要爲每個開始在屏幕上繪製形狀的人創建一個arrayList。幾名球員必須有可能同時畫出形狀。所有點值應存儲在player
arrayList中。最後,所有player
arrayList應該存儲在名爲players
的主arrayList中。我可以得到一些幫助來解決這個問題嗎?我不知道如何開始。
我宣佈我列出了GameLoop類:
// Lists to handle multiple touch input
players = new ArrayList<List<Point>>(); // Main arrayList
player = new ArrayList<Point>(); // Inner arrayList
下面的代碼是在MainActivity類和我使用的GameLoop
像gameLoop
對象與GameLoop方法進行通信。
@Override
public boolean onTouch(View v, MotionEvent event) {
synchronized (gameLoop) {
for(int i=0; i<event.getPointerCount(); i++) { // Numbers of pointers on screen
int id = event.getPointerId(i);
// Check if fingers touch screen
if (event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP || event.getActionMasked() == MotionEvent.ACTION_UP)) {
}
// Check if fingers leave the screen
else if (event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN || event.getActionMasked() == MotionEvent.ACTION_DOWN)) {
}
// Check movement on screen
else {
}
}
}
return true;
}
感謝您的信息!看起來很複雜(後面我會詳細討論) – 2013-05-11 07:53:57
沒有那麼複雜,你有一個運動位置的歷史,大小爲getHistorySize(),並且在每個歷史記錄中都有'getPointerCount()'指針。可以通過使用'getHistoricalX(pointer,history)'來查看給定歷史事件中每個指針的位置,然後你需要做的就是將正確的事件放在正確的列表中,每個指針,這就是'HashMap' – tbkn23 2013-05-11 07:58:26
你好,我想了解你的代碼示例我可以使用arrayLists而不是hashMaps嗎? – 2013-05-14 07:11:53