Несколько моих друзей сотрудничают друг с другом, чтобы разработать приложение для нашей компьютерной школы в конце года. Мы делаем измененную игру типа «понг». Я работаю над версией 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.