ゲームに奇妙な問題があります。私は2つのジョイスティックを使用しています。1つは射撃/照準用で、もう1つはキャラクターの移動用です。何らかの理由で、私のマルチタッチメソッドは一度に1つの動きしか登録しません。下を押すと2番目のポインターが登録されますがACTION_MOVE
、最初のポインターに対してのみ機能します。これは奇妙なことです。つまり、1つ以上のポインターが必要ですが、同時に1つ以上のポインターを移動することはできません。私はgamedev.stackexchangeでこれを尋ねました、そしてそれは約1週間アクティブでした、いくつかの答えを得ました、しかしそれを100%機能させるものは何もありません。そして、私は自分で何時間も試しました。
onTouchメソッドのコード:
//global variables
private int movePointerId = -1;
private int shootingPointerId = -1;
public void update(MotionEvent event) {
if (event == null && lastEvent == null) {
return;
} else if (event == null && lastEvent != null) {
event = lastEvent;
} else {
lastEvent = event;
}
// grab the pointer id
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
int actionIndex = event.getActionIndex();
int pid = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int x = (int) event.getX(pid);
int y = (int) event.getY(pid);
String actionString = null;
switch (actionCode)
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
actionString = "DOWN";
try{
if(x > 0 && x < steeringxMesh + (joystick.get_joystickBg().getWidth() * 2)
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
movingPoint.x = x;
movingPoint.y = y;
movePointerId = pid;
dragging = true;
//checks if Im pressing the joystick used for moving
}
else if(x > shootingxMesh - (joystick.get_joystickBg().getWidth()) && x < panel.getWidth()
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
shootingPoint.x = x;
shootingPoint.y = y;
shootingPointerId = pid;
shooting=true;
//checks if Im pressing the joystick used for shooting
}
}catch(Exception e){
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
if( pid == movePointerId ){
movePointerId = -1;
dragging = false;
}
else if( pid == shootingPointerId ){
shootingPointerId = -1;
shooting=false;
}
actionString = "UP";
break;
case MotionEvent.ACTION_MOVE: // this is where my problem is
if( pid == movePointerId ) {
movingPoint.x = x;
movingPoint.y = y;
} else if( pid == shootingPointerId ) {
shootingPoint.x = x;
shootingPoint.y = y;
}
actionString = "MOVE";
break;
}
印刷actionString
しpid
て、移動するとチェックするだけpid=0
ですが、()を押すと、ACTION_POINTER_DOWN
別のファイルが登録されていることがわかりpid
ます。これは本当に混乱します。
わかりやすくするために、たとえばシューティングスティックで2番目のポインターを押すと、他のジョイスティックを同時に動かしても、押した位置になりますが、それはそのままになります。もう一方のジョイスティックを手放しました。それが1タッチ以上と1以上を登録するというさらなる証拠pid
。
さらに説明が必要な場合はお知らせください。