2015-12-12 1 views
1

Несколько моих друзей сотрудничают друг с другом, чтобы разработать приложение для нашей компьютерной школы в конце года. Мы делаем измененную игру типа «понг». Я работаю над версией Android, а двое работают над версией iOS. Все прошло хорошо, основным языком, который мы используем в классе, является Python, поэтому переход на Java был немного кривой обучения.Android Multi-Touch Help - перетаскивание двух объектов сразу

Я борюсь с перетаскиванием двух весла сразу. Я прочитал много сообщений здесь и на странице разработчиков Android, и большая часть кода пришла оттуда, но я не могу это получить. Когда один указатель находится на устройстве, оба весла хорошо переносятся, но как только второй указатель попадает на экран, он игнорирует первый указатель и использует только второй указатель, пока он не будет отпущен. Вот мой код ...

private final static int INVALID_POINTER_ID = -1; 
    private int mActivePointerId = INVALID_POINTER_ID; 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     int action = MotionEventCompat.getActionMasked(ev); 

     switch (action) { 

      case MotionEvent.ACTION_DOWN: { 
       final int pointerIndex = MotionEventCompat.getActionIndex(ev); 
       mLastTouchX1 = MotionEventCompat.getX(ev, pointerIndex); 
       mActivePointerId = MotionEventCompat.getPointerId(ev, 0); 
       break; 
      } 

      case MotionEvent.ACTION_POINTER_DOWN:{ 
       final int pointerIndex = MotionEventCompat.getActionIndex(ev); 
       if (pointerIndex == 1) { 
        mLastTouchX1 = MotionEventCompat.getX(ev, pointerIndex); 
       } 
       mActivePointerId = MotionEventCompat.getPointerId(ev, pointerIndex); 
      } 


      case MotionEvent.ACTION_MOVE: { 
       final int pointerIndex = 
         MotionEventCompat.findPointerIndex(ev, mActivePointerId); 


        final float x = MotionEventCompat.getX(ev, pointerIndex); 
        final float y = MotionEventCompat.getY(ev, pointerIndex); 

        final float deltaX = x - mLastTouchX1; 
        paddle1.update(deltaX, screenX, y, screenY); 
        paddle2.update(deltaX, screenX, y, screenY); 


        mLastTouchX1 = x; 

        invalidate(); 
        break; 
       } 

      case MotionEvent.ACTION_UP: { 
       break; 
      } 
      case MotionEvent.ACTION_CANCEL: { 
       break; 
      } 

      case MotionEvent.ACTION_POINTER_UP:{ 
       final int pointerIndex = MotionEventCompat.getActionIndex(ev); 
       final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); 

       if (pointerId == mActivePointerId) { 
        // This was our active pointer going up. Choose a new 
        // active pointer and adjust accordingly. 
        final int newPointerIndex = pointerIndex == 0 ? 1 : 0; 
        mLastTouchX2 = MotionEventCompat.getX(ev, newPointerIndex); 
        mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex); 
       } 
       break; 
      } 
     } 

Paddle1 и paddle2 являются экземплярами моего класса paddle. Вот мой метод обновления в классе.

public void update (float x, int screenX, float y, int screenY){ 
    if (y > screenY/2){ 
     rect1.left = rect1.left + x; 
     rect1.right = rect1.left + length; 
     if (rect1.left < 0){ 
      rect1.left=0; 
      rect1.right = rect1.left + length; 
     } 
     if (rect1.right > screenX){ 
      rect1.left = screenX - length; 
      rect1.right = screenX; 
     } 
    } 
    else{ 
     rect2.left = rect2.left + x; 
     rect2.right = rect2.left + length; 
     if (rect2.left < 0){ 
      rect2.left=0; 
      rect2.right = rect2.left + length; 
     } 
     if (rect2.right > screenX){ 
      rect2.left = screenX - length; 
      rect2.right = screenX; 
     } 
    } 

Я понимаю, что мой код может быть неаккуратным, но моя конечная цель, чтобы иметь возможность перемещать два весла одновременно. Если кто-нибудь может показать мне, что мне нужно добавить или настроить, чтобы добраться туда, это было бы здорово.

спасибо.

Редактировать: Использование Android Studio.

ответ

1

Поиск в Интернете и нашел хорошую статью на вашей проблеме, vogella.com/tutorials/AndroidTouch/article.html Next Time Однако сделать быстрый поиск Google Перед Ask Questions.Rember Интернет большое место полный информации;)

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