Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX:在单独的类中创建GestureListener_Java_Android_Libgdx - Fatal编程技术网

Java LibGDX:在单独的类中创建GestureListener

Java LibGDX:在单独的类中创建GestureListener,java,android,libgdx,Java,Android,Libgdx,我目前有一个类,它处理我想要的所有手势,它看起来如下: public class InputHandler implements GestureDetector.GestureListener{ private Player myPlayer; public InputHandler(Player player){ myPlayer = player; } @Override public boolean touchDown(float x, float y,

我目前有一个类,它处理我想要的所有手势,它看起来如下:

public class InputHandler  implements GestureDetector.GestureListener{

  private Player myPlayer;

  public InputHandler(Player player){
    myPlayer = player;
  }

  @Override
  public boolean touchDown(float x, float y, int pointer, int button) {
    return false;
  }

  @Override
  public boolean tap(float x, float y, int count, int button) {
    return false;
  }

  @Override
  public boolean longPress(float x, float y) {
    return false;
  }

  @Override
  public boolean fling(float velocityX, float velocityY, int button) {
    if(velocityY > 0){
      myPlayer.onSwipeUp();
    }
    return false;
  }

  @Override
  public boolean pan(float x, float y, float deltaX, float deltaY) {
    return false;
  }

  @Override
  public boolean panStop(float x, float y, int pointer, int button) {
    return false;
  }

  @Override
  public boolean zoom(float initialDistance, float distance) {
    return false;
  }

  @Override
  public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) {
    return false;
  }

  @Override
  public void pinchStop() {

  }
}
如您所见,我使用的唯一方法是“fling”方法,但我想在我的“MainScreen”类中创建手势侦听器,因为它包含对“myPlayer”的引用,我想将其传递到此类中,但我不确定如何创建侦听器。到目前为止,我的构造函数中有:

public class GameScreen implements Screen {

  private GameWorld world;
  private GameRenderer renderer;
  GestureDetector gd;


  public GameScreen(){
    float screenWidth = Gdx.graphics.getHeight();
    float screenHeight = Gdx.graphics.getWidth();
    float gameWidth = 816;
    float gameHeight = screenHeight/(screenWidth/gameWidth);

    int midpointY = (int)(gameHeight/2);

    world = new GameWorld(midpointY);
    renderer = new GameRenderer(world);

    gd = new GestureDetector(new myGestureListener(world.getPlayer())); //Error here, 'myGestureListener' cannot be resolved
    Gdx.input.setInputProcessor(gd);



  }
我知道“myGestureListener”从未创建过,因此无法解决,但我对如何在确保正确传递引用的同时修复此错误感到困惑。如果我需要初始化一个GestureListener,我该怎么做


如果这个问题没有意义或者没有解决方案,我提前向您道歉,我仍然不熟悉使用libGDX框架进行编码。

您没有名为
myGestureListener
的类吗


从您的问题来看,似乎您将其命名为
InputHandler
,因此可能您使用了错误的名称。

InputHandler是您的GestureListener实现的类,因此将该类的对象作为参数传递给GestureDetector构造函数

public class GameScreen implements Screen {

  private GameWorld world;
  private GameRenderer renderer;
  private GestureDetector gd;

  public GameScreen(){
    float screenWidth = Gdx.graphics.getHeight();
    float screenHeight = Gdx.graphics.getWidth();
    float gameWidth = 816;
    float gameHeight = screenHeight/(screenWidth/gameWidth);

    int midpointY = (int)(gameHeight/2);

    world = new GameWorld(midpointY);
    renderer = new GameRenderer(world);

    gd = new GestureDetector(new InputHandler(world.getPlayer())); 
    Gdx.input.setInputProcessor(gd);
  }

您没有创建一个名为
myGestureListener
的类。除了下面给出的问题的答案外,这里有一个提示:尝试将侦听器与播放器分离(遵循可靠的原则),如果您只需要捕获fling()事件,请使用fling()方法创建一个简单的接口,让GameScreen实现这个界面,并将absctracted GameScreen传递给InPurthandler(FlingListener listener)…哦,天哪,我不知道我怎么没听清楚。非常感谢你!!