Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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中处理多点触控事件(android上)_Java_Android_Libgdx_Multi Touch - Fatal编程技术网

Java 在libgdx中处理多点触控事件(android上)

Java 在libgdx中处理多点触控事件(android上),java,android,libgdx,multi-touch,Java,Android,Libgdx,Multi Touch,嘿,我正在使用libgdx开发一个游戏,我正在使用一个输入多路复用器来处理触摸输入和基于键盘的输入。这里是我目前正在实现的带有相关@Overide方法的类。我一开始只处理键盘事件,以便于快速开发,现在已经重新实现了处理触摸事件,而且我已经按照我希望的方式规划好了一切,但是在触摸设备上,我似乎无法正确实现多点触摸ie。当我向左或向右移动时,我也不能跳跃或投掷星星,我不确定是否准确这是为什么我读过Galaxy Nexus的一个bug,以及它是如何处理多点触控的,但是我运行Galaxy S3&Gala

嘿,我正在使用libgdx开发一个游戏,我正在使用一个输入多路复用器来处理触摸输入和基于键盘的输入。这里是我目前正在实现的带有相关@Overide方法的类。我一开始只处理键盘事件,以便于快速开发,现在已经重新实现了处理触摸事件,而且我已经按照我希望的方式规划好了一切,但是在触摸设备上,我似乎无法正确实现多点触摸ie。当我向左或向右移动时,我也不能跳跃或投掷星星,我不确定是否准确这是为什么我读过Galaxy Nexus的一个bug,以及它是如何处理多点触控的,但是我运行Galaxy S3&Galaxy tab3和am在任何地方都没有看到使用这些设备的相同帐户。在桌面上,通过按键,我可以运行+jum+throwstar等

无论如何,下面是多路复用器/输入处理器中最相关的代码。如果我遗漏了任何相关信息,请不要犹豫询问,我可以更新

public class GameScreen implements Screen, GestureListener, InputProcessor{

    GestureDetector gestureDetector ;
    String message;
    int directionPointer, actionPointer;
  public GameScreen(Game game, int levelNum){

    controller = new BobController(world, this);
    InputMultiplexer im = new InputMultiplexer();
    GestureDetector gd = new GestureDetector(this);
    im.addProcessor(gd);
    im.addProcessor(this);

    Gdx.input.setInputProcessor(im);
  }

  @Override
  public boolean keyDown(int keycode) {
    if (keycode == Keys.LEFT)
        controller.leftPressed();
    if (keycode == Keys.RIGHT)
        controller.rightPressed();
    if (keycode == Keys.Z)
        controller.jumpPressed();
    if (keycode == Keys.C)
        controller.throwPressed();
    if (keycode == Keys.X)
        controller.punchPressed();
    return true;
}

@Override
public boolean keyUp(int keycode) {
    if (keycode == Keys.LEFT)
        controller.leftReleased();
    if (keycode == Keys.RIGHT)
        controller.rightReleased();
    if (keycode == Keys.Z)
        controller.jumpReleased();
    if (keycode == Keys.X)
        controller.punchReleased();
    if (keycode == Keys.C)
        controller.throwReleased();
    if (keycode == Keys.D)
        renderer.setDebug(!renderer.isDebug());
    return true;
}

@Override
public boolean keyTyped(char character) {
    // TODO Auto-generated method stub
    message= "keyTyped was detected";
    Gdx.app.log("INFO", message);
    return false;

}


/// all below methods are for touch based game play
@Override
public boolean fling(float velocityX, float velocityY, int button) {
    if(Math.abs(velocityX)>Math.abs(velocityY)){
        if(velocityX>0){
            controller.throwPressed();
            return true;
        }else{

        }
    }else{
        if(velocityY<0){
            controller.jumpPressed();
            return true;
        }else{   
            controller.punchPressed();
            return true;
        }
    }
    return false;
}

@Override
public boolean touchDown(int x, int y, int pointer, int button) {
    /*if (!Gdx.app.getType().equals(ApplicationType.Android))
        return false;*/
    if (x < width / 3 && y > height / 2) {
        directionPointer= pointer;
        if(x< width/6){     
            controller.leftPressed();
            return true;
        }else{
            controller.rightPressed();  
            return true;
        }       

    }else{
        actionPointer= pointer;

    }
    return false;

}

@Override
public boolean touchUp(int x, int y, int pointer, int button) {

    if ( pointer==directionPointer) {           
        controller.leftReleased();
        controller.rightReleased(); 
        return true;                
    }
    return true;

}
}

嘿,我已经弄明白了为什么当屏幕上有另一个手指时,我无法检测到一个抛媚眼的动作,我的情况是让charecter移动。原因是fling不是一个多点触控启用的事件,因此,只有当手势检测器触发事件时,它才被检测。
因此,我目前正在重新设计逻辑,使用触地和平移、平移顶面事件,以便处理多点触控的投掷感。我将用代码更新我是如何实现的,以及它可能导致的一些错误。对于将来遇到同样问题的任何人

你如何区分向左或向右移动与投掷星星?屏幕上的不同区域是否有虚拟操纵杆?或者你在映射不同的动作,点击是移动,滑动是投掷?或者其他什么?嘿,是的,要检测向左或向右移动,手指必须位于屏幕的右下三分之一,要检测跳跃,除了左下三分之一之外,必须在屏幕上的任何位置进行throwstar或punch-swip移动