2012-02-13 2 views
2

Я опытный программист с C++/C#, пытаясь попасть в мир игр для Android. Использование Java в Eclipse.Android Java - отслеживание объектов или событий с несколькими касаниями?

Есть руководство по bazillion о том, как перемещать один объект, отслеживая прикосновение к целому экрану, но как я могу отслеживать события касания на многих отдельных объектах случайно на экране?

Для начала я хотел написать класс, который будет создан несколько раз и удерживаться в arraylist. Каждый из них обращается к случайной позиции в полноэкранном режиме SurfaceView. Легкий материал до сих пор ... Но для жизни меня я не могу узнать, как перетащить любой из этих объектов!

У меня есть действие, которое использует пользовательский вид (расширяет SurfaceView). Создает экземпляр класса GameBoard, который обрабатывает рисунок экрана игрового поля. класс GameBoard также держит/рисует ArrayList из игровых персонажей, которые отлично рисуют на экране, но нуждаются в сенсорном управлении.

Im на мой ум, любая помощь там?

ответ

0

Я написал сверху-вниз шутер (Akari), который не перетаскивает объекты вокруг, но использует их местоположение для обнаружения столкновения.

В моем SurfaceView я вызываюThread.touchEventType (x, y). Поток проходит через объекты (в вашем случае, массив) и проверяет, совпадают ли они. В случае совпадения он возвращает значение, связанное с объектом, и все действия MotionEvent.ACTION_MOVEMENT до MotionEvent.ACTION_UP выполняются на этом объекте.

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

+0

Hrmm, кажется, неэффективно перебирать все «осязаемые» объекты, чтобы проверять наличие столкновения (или любого события) ... но похоже, что это делается в мире Android. – Overunity

+0

Оглядываясь, кажется, что это способ сделать это. Если точная точность не нужна, я настоятельно рекомендую использовать класс Rect для обнаружения. – YumeApps

0

У меня была такая же проблема, как и у вас. Мое решение было несколько иным. Я пытаюсь написать игру в спину. У меня есть 30 объектов для размещения на экране и их перемещения. Конечно, некоторые из них перекрываются. Поэтому моя проблема заключалась в том, что я коснулся объекта и в итоге переместил еще один (из того, что я считаю, это объект, который был помещен на экран после того, как я коснулся и слева от того, к которому я коснулся).

Как бы то ни было, я создал пользовательский объект, который расширяет представление и помещает его в GestureOverlayView. Я переопределить onTouchEvent(), и это выглядит примерно так:

public boolean onTouchEvent(MotionEvent event) { 
    int x = (int) event.getRawX(); 
    int y = (int) event.getRawY(); 

    int action = event.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      if (Math.abs(x - this.getX()) < BackgroundView.slotSize && Math.abs(y - this.getY()) < BackgroundView.slotSize) { 
       //do whatever I want 
       return true; 
      } else { 
       return false; 
      } 
      //break; 
     case MotionEvent.ACTION_MOVE: 
      //this is the dragging part 
      this.setX(x - size/2); 
      this.setY(y - size/2); 
      break; 
     case MotionEvent.ACTION_ 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
     case MotionEvent.ACTION_OUTSIDE: 
      break; 
     default: 
    } 
    return true; 
} 

Из того, что я прочитал, когда я возвращаюсь ложным, то действие не расходуется, так что другой объект может сделать это. Таким образом, ни один объект не потребляет его до тех пор, пока он не вернется к истине.

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

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