我一直在一個遊戲中工作,我試圖讓控制器,沒有太複雜,爲此我需要跟蹤2個輸入(手指):1火按鈕和移動鍵(上,下,左,右)你如何使用MotionEvent.ACTION_POINTER_INDEX_SHIFT?
這就是問題:手指1向下,手指2下來,手指1上升想這是2,然後手指2上升想這是1
D/Controlls(18849): Action Down 1
D/Controlls(18849): Coordinates 267.7908 415.24274
D/Controlls(18849): Action Pointer Down 2
D/Controlls(18849): Coordinates 281.11423 417.23993
D/Controlls(18849): Action Pointer UP 1
D/Controlls(18849): Coordinates 272.7869 419.23718
D/Controlls(18849): Action UP 2
D/Controlls(18849): Coordinates 1148.103 439.20947
這是用於處理2個輸入的OnTouchEvent的代碼:
@Override
public boolean onTouchEvent(MotionEvent event) {
int index = event.getActionIndex();
int pointerId = event.getPointerId(index);
int action = event.getActionMasked();
int oldX, oldY;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
{
hero.moveControlls((int)event.getX(), (int)event.getY());
Log.d("Controlls", "Action Down "+ pointerId);
Log.d("Controlls", "Coordinates "+ event.getX() + " "+ event.getY());
break;
}
case MotionEvent.ACTION_UP:
{
hero.setScreenTouching(false);
Log.d("Controlls", "Action UP "+ pointerId);
Log.d("Controlls", "Coordinates "+ event.getX() + " "+ event.getY());
break;
}
case MotionEvent.ACTION_POINTER_DOWN:
{
Log.d("Controlls", "Action Pointer Down "+ pointerId);
Log.d("Controlls", "Coordinates "+ event.getX() + " "+ event.getY());
break;
}
case MotionEvent.ACTION_POINTER_UP:
{
Log.d("Controlls", "Action Pointer UP "+ pointerId);
Log.d("Controlls", "Coordinates "+ event.getX() + " "+ event.getY());
break;
}
}
return true;
}
現在,我擡頭看了一些例子,但無法理解它們。我在API中查找了MotionEvent,它說使用$ ACTION_POINTER_INDEX_SHIFT $,我不知道如何使用它,因爲它們沒有示例或使它更容易理解。任何幫助如何做到這一點?
我有點得到你在說什麼,但仍然不能實現你介意給我一個例子嗎? –
我修改了你的switch語句。 – Devunwired
我有一些類似的問題。您介意說明使用MotionEvent.ACTION_POINTER_INDEX_MASK(在每個關於此主題的示例中都會發生)對動作進行「與」操作以及該轉換的目的是什麼?我也不清楚這些面具是什麼,文件是神祕的。我會非常感謝,併爲更清晰地upvote。謝謝! – Rookatu