2012-04-07 6 views
1

Ich bin ein Student, der eine Air-Hockey-Android-Spiele zu entwickeln. Ich habe ein Problem mit Multi-Touch zu verstehen. Ich lerne gerade über ACTION_DOWN, ACTION_POINTER_DOWN etc.identifiziert Multi-Touch-Zeiger in action_move

aber nach Problem ist bei ACTION_MOVE. Ich erstelle 2 Sprites für 2 Spieler. Das erste Sprite bewegt sich dahin, wo mein 1. Finger hingeht, aber mein 2. Sprite bewegt sich nicht dort, wo sich mein 2. Finger bewegt.

meine Frage ist, wie ich identifizieren möchte, welcher Finger bewegt sich in ACTION_MOVE? Ich habe versucht, getPointerId (Index) zu verwenden, aber ich verstehe ich nicht, wie es verwenden, da der Index ändert sich, wenn der erste Finger den Bildschirm

switch (action & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_DOWN: { 
    break; 
} 
case MotionEvent.ACTION_POINTER_DOWN: { 
    break; 
} 
case MotionEvent.ACTION_UP: { 
    break; 
} 
case MotionEvent.ACTION_POINTER_UP: { 
    break; 
} 
case MotionEvent.ACTION_MOVE: { 
     if((int)event.getPointerId(index) == 0){  //i know this IF statement is wrong, what should i do? 
     player1.setX((int)event.getX()); //player1 & player2 is a sprite object 
     player1.setY((int)event.getY()); 
     } 
     if((int)event.getPointerId(index) == 1){ 
     player1.setX((int)event.getX()); 
     player1.setY((int)event.getY()); 
     } 
} 

} verlassen

Antwort

0

Sie nicht wissen können, welcher Bereich sein zuerst berührt. Der erste Finger/Touch bekommt Zeiger ID = 0 der zweite = 1 und so weiter. Was Sie tun können, ist dies:

public boolean onTouchEvent(MotionEvent event) { 

    // If this does not work search for a way to get the screen width 
    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

    int eventaction = event.getActionMasked(); 

    int num = event.getPointerCount(); 

    // For every touch 
    for (int a = 0; a < num; a++) { 

     int X = (int) event.getX(event.getPointerId(a)); 
     int Y = (int) event.getY(event.getPointerId(a)); 


     int allowed_touch_range = display.getWidth()/2; // Your screen width divided by 2 
     switch (eventaction) { 

     case MotionEvent.ACTION_MOVE: 

      // Left half of the screen 
      if (X < allowed_touch_range) { 
           /* Player1 Move */ 
      } 
      // Rigth half 
      if (X > allowed_touch_range) { 
           /* Player2 Move */ 
      } 

      break; 

     } 
    } 

    return true; 
}