Я создаю игру, в которой механика движения должна работать следующим образом: нажмите / удерживайте правую сторону экрана, чтобы ускориться в направлении, в котором вы находитесь, и проведите пальцем влево или вправо по левой стороне экран для поворота. Это работает достаточно хорошо, пока игрок не попытается вращаться вторым пальцем, а ускоряется первым. Кажется, что метод pan по-прежнему запускается с помощью второго пальца, но очень редко, и gdx.input.getX (i), если операторы не запускаются. Я использую метод pan класса GestureDetector. Вот видео: https://www.youtube.com/watch?v=FmHI81ByPmU&feature=youtu.be
Я смотрел на этот похожий вопрос: libgdx несколько событий панорамирования , но ответы у меня не сработали, установка панорамирования для возврата false ничего не сделала, и элементы управления не связаны с кнопками, поэтому я могу ' изменить метод на touchDown
Метод панорамирования сам по себе:
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
for(int i = 0 ; i < 2 ; i++){//In case they drag wit second finger
if(Gdx.input.isTouched(i) && Gdx.input.getX(i) < Gdx.graphics.getWidth() / 2){
if(Gdx.input.getDeltaX(i) < - 3){
directionListener.onRight();
System.out.println(">");
}
if(Gdx.input.getDeltaX(i) > 3) {
directionListener.onLeft();
System.out.println("<");
}
finger = i;//used to stop body from rotating when the finger rotating it is lifted
System.out.println(i + " = " + Gdx.input.getX(i));
}
}
//Can't replace with touchdown because it does not override method from superclass
return super.pan(x, y, deltaX, deltaY);
}
Весь класс:
package com.doppelganger.spacesoccer.Helpers;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.input.GestureDetector;
public class SimpleDirectionGestureDetector extends GestureDetector{
public static int finger = 10;
public interface DirectionListener {
void onLeft();
void onRight();
}
public SimpleDirectionGestureDetector(DirectionListener directionListener) {
super(new DirectionGestureListener(directionListener));
}
private static class DirectionGestureListener extends GestureDetector.GestureAdapter {
DirectionListener directionListener;
DirectionGestureListener(DirectionListener directionListener){
this.directionListener = directionListener;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
for(int i = 0 ; i < 2 ; i++){//In case they drag with second finger
if(Gdx.input.isTouched(i) && Gdx.input.getX(i) < Gdx.graphics.getWidth() / 2){
if(Gdx.input.getDeltaX(i) < - 3){
directionListener.onRight();
System.out.println(">");
}
if(Gdx.input.getDeltaX(i) > 3) {
directionListener.onLeft();
System.out.println("<");
}
finger = i;//used to stop body from rotating when the finger rotating it is lifted
System.out.println(i + " = " + Gdx.input.getX(i));
}
}
//Can't replace with touchdown because it does not override method from superclass
return super.pan(x, y, deltaX, deltaY);
}
}
}