Войти
ПрограммированиеФорумОбщее

Проблема с двумя джойстиками в Android Studio

#0
9:23, 30 июля 2022

Доброго времени суток, я разрабатываю игру в Андроид Студио с двумя джойстиками. Вроде бы джойстики работают сами по себе хорошо, но стоит их зажать вместе, они начинают управляться одним касанием. Естественно я добавил методы Pointer, но, как я понимаю, этого недостаточно. Я искал информацию про мультитач на различных форумах, и либо они мне не подходили, либо недостаточно освещали тему. Также стоит сказать, что я новичок в Android Studio и могу не понимать некоторых аспектов движка.
Вот код:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        int actionMask = event.getActionMasked();

        switch(actionMask) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_POINTER_DOWN:
                int pointerJoystick_1 = event.getActionIndex();
                int pointerJoystick_2 = event.getActionIndex();

                int idJoystick_1 = event.getPointerId(pointerJoystick_1);
                int idJoystick_2 = event.getPointerId(pointerJoystick_2);

                if (joystick.isPressed((double) event.getX(idJoystick_1), (double) event.getY(idJoystick_1))) {
                    joystickPointerId_1 = event.getPointerId(event.getActionIndex());
                    Log.d("MyTag", "Касание джойстика 1");
                    joystick.setIsPressed(true);
                }

                if (joystick_2.isPressed_2((double) event.getX(idJoystick_2), (double) event.getY(idJoystick_2))) {
                    joystickPointerId_2 = event.getPointerId(event.getActionIndex());
                    Log.d("MyTag", "Касание джойстика 2");
                    joystick_2.setIsPressed_2(true);
                }
            return true;

            case MotionEvent.ACTION_MOVE:
                int pointerJoystick_MOVE_1 = event.getActionIndex();
                int pointerJoystick_MOVE_2 = event.getActionIndex();

                int idJoystick_MOVE_1 = event.getPointerId(pointerJoystick_MOVE_1);
                int idJoystick_MOVE_2 = event.getPointerId(pointerJoystick_MOVE_2);

                if (joystick.getIsPressed() && event.getPointerId(pointerJoystick_MOVE_1) == idJoystick_MOVE_1) {
                    Log.d("MyTag", "Джойстик 1 перемещается");
                    joystick.setActuator((double) event.getX(idJoystick_MOVE_1), (double) event.getY(idJoystick_MOVE_1));
                }

                if (joystick_2.getIsPressed_2() && event.getPointerId(pointerJoystick_MOVE_2) == idJoystick_MOVE_2) {
                    Log.d("MyTag", "Джойстик 2 перемещается");
                    joystick_2.setActuator_2((double) event.getX(idJoystick_MOVE_2), (double) event.getY(idJoystick_MOVE_2));
                }
            return true;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
                if(joystickPointerId_1 == event.getPointerId(event.getActionIndex())){
                    joystick.setIsPressed(false);
                    joystick.resetActuator();
                    Log.d("MyTag", "Джойcтик 1 отпущен");
                }

                if(joystickPointerId_2 == event.getPointerId(event.getActionIndex())){
                    joystick_2.setIsPressed_2(false);
                    joystick_2.resetActuator_2();
                    Log.d("MyTag", "Джойстик 2 отпущен");
                }
            return true;
        }

        return super.onTouchEvent(event);
    }
#1
21:27, 30 июля 2022

FufSov
> что я новичок в Android Studio и могу не понимать некоторых аспектов движка.
Движок Android studio говоришь?

#2
16:01, 31 июля 2022

Андрей5000 извиняюсь, интегрированная среда разработки.

#3
16:08, 31 июля 2022

FufSov
Ты коддишь на Java с использованием библиотеки - Android SDK.
Android Studio же просто выполняет роль удобного блокнота

ПрограммированиеФорумОбщее

Тема в архиве.