嘿所以我正在使用libgdx来开发一个游戏,而我正在使用输入多路复用器来处理基于触摸和键盘输入的输入。这里是带有相关@Overide
方法的类我正在实施。 (我开始只处理键盘事件以便于快速开发,并且现在已经重新实现以处理触摸事件)Anayways我已经按照我希望的方式绘制了所有内容,但是在触摸设备上我似乎无法正确实现多点触控即。当我向左或向右移动时,我也无法跳跃或抛出一颗星星我不确定为什么会这样(我已经读过Galaxy Nexus的一个错误以及它如何处理多点触控)但是我正在运行Galaxy S3& Galaxy tab3并没有在这些设备的任何地方看到相同的帐户。 (在桌面上有键我可以运行+ jum + throwstar等)
无论如何,这里是多路复用器/ InputProccesor中最相关的代码。如果我遗漏了任何相关信息,请不要犹豫,我可以随时更新。
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;
}
}
答案 0 :(得分:0)
嘿,所以我已经深究了为什么当另一个手指在屏幕上时(我的情况下使得字符移动)我无法检测到甩尾的原因。原因是fling不是一个多点触控启用事件,因此只检测是否只有手势检测器触发了事件。 因此,我目前正在重新设计逻辑以使用触地和平移,panstop事件,以便获得多点触控感应。我将使用代码更新我如何实现它以及它可能导致的一些错误。对于将来遇到同样问题的其他人。