2014-12-16 2 views
1

Я делаю игру platfrom для Android, и я мог бы использовать некоторую помощь с событиями касания. Это мой код:Как обрабатывать мультитач?

public boolean onTouch(MotionEvent e, int scaledX, int scaledY) { 
    for (int i = 0; i < object.size(); i++) { 
     tempObject = object.get(i); 
     if (tempObject.getId() == ObjectId.Player) { 

      if (e.getAction() == MotionEvent.ACTION_MOVE) { 

       if (moveLeft.contains(scaledX, scaledY)) { 
        tempObject.setMovingLeft(true); 
        tempObject.setMovingRight(false); 

       } 
       if (moveLeftExit.contains(scaledX, scaledY) 
         && !moveLeft.contains(scaledX, scaledY)) { 
        tempObject.setMovingLeft(false); 

       } 
       if (moveRight.contains(scaledX, scaledY)) { 
        tempObject.setMovingRight(true); 
        tempObject.setMovingLeft(false); 

       } 
       if (moveRightExit.contains(scaledX, scaledY) 
         && !moveRight.contains(scaledX, scaledY)) { 
        tempObject.setMovingRight(false); 

       } 

      } 
      if (e.getAction() == MotionEvent.ACTION_UP 
        || e.getAction() == MotionEvent.ACTION_OUTSIDE) { 

       if (moveLeft.contains(scaledX, scaledY)) { 
        tempObject.setMovingLeft(false); 

       } 
       if (moveRight.contains(scaledX, scaledY)) { 
        tempObject.setMovingRight(false); 

       } 
      } 

      if (e.getAction() == MotionEvent.ACTION_DOWN) { 

       if (jump.contains(scaledX, scaledY)) { 
        if(tempObject.getVelY() ==0) 
        tempObject.setVelY(-15); 
       } 
      } 

     } 
    } 
    return true; 
} 

Все отлично работает в то время как я использую один палец, если прикоснуться к moveRight прямоугольник символ перемещается вправо и, когда я пошевелить пальцем в сторону он забоев, как и ожидалось. Проблема в том, что если я касаюсь кнопки, касаясь какой-то другой кнопки, она не реагирует на нее. Итак, я думаю, мой вопрос в том, как я могу изменить свой код, чтобы он реагировал на мультитач?

Спасибо! :)

ответ

1

Вот простой код.

public boolean onTouch(View v, MotionEvent event) { 

    int action = MotionEventCompat.getActionMasked(event); 
    int pointerIndex = MotionEventCompat.getActionIndex(event); 
    int x = (int)MotionEventCompat.getX(event,pointerIndex); 
    int y = (int)MotionEventCompat.getY(event,pointerIndex); 

    switch(action) 
    { 
    case MotionEvent.ACTION_DOWN: 
     // 
     // First finger was touched. Set "pointerIndex" to some value (lets say 0 or -1) 
     // Save "pointerIndex" corresponding to this touched object. 
     // 
     break; 
    case MotionEvent.ACTION_POINTER_DOWN: 
     // 
     // More finger touched when first finger is already touched. 
     // Save "pointerIndex" corresponding to this touched object. 
     // 
     break; 
    case MotionEvent.ACTION_MOVE: 
     // 
     // Finger with "pointerIndex" was moved. 
     // 
     break; 
    case MotionEvent.ACTION_UP: 
     // 
     // The first touched finger went off. 
     // 
     break; 
    case MotionEvent.ACTION_POINTER_UP: 
     // 
     // Finger with "pointerIndex" went off (other than first finger) 
     // 
     break; 
    } 
    return true; 
} 

Удачи. :)

Смежные вопросы