我正在使用 Libgdx 制作赛车游戏。我想触摸屏幕右侧的一半以加快速度,同时在不删除先前触摸点的情况下再次触摸屏幕左侧的另一个触摸点进行射击。我无法检测到后来的触摸点。
我已经搜索并获得了 Gdx.input.isTouched(int index)
方法,但无法确定如何使用它。我的屏幕触摸代码是:
if(Gdx.input.isTouched(0) && world.heroCar.state != HeroCar.HERO_STATE_HIT){
guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
if (OverlapTester.pointInRectangle(rightScreenBounds, touchPoint.x, touchPoint.y)) {
world.heroCar.state = HeroCar.HERO_STATE_FASTRUN;
world.heroCar.velocity.y = HeroCar.HERO_STATE_FASTRUN_VELOCITY;
}
} else {
world.heroCar.velocity.y = HeroCar.HERO_RUN_VELOCITY;
}
if (Gdx.input.isTouched(1)) {
guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
if (OverlapTester.pointInRectangle(leftScreenBounds, touchPoint.x, touchPoint.y)) {
world.shot();
}
}
最佳答案
您需要使用 Gdx.input.getX(int index)
方法。整数 index
参数表示 Activity 指针的 ID。要正确使用它,您需要遍历所有可能的指针(以防两个人在平板电脑上有 20 个手指?)。
像这样:
boolean fire = false;
boolean fast = false;
final int fireAreaMax = 120; // This should be scaled to the size of the screen?
final int fastAreaMin = Gdx.graphics.getWidth() - 120;
for (int i = 0; i < 20; i++) { // 20 is max number of touch points
if (Gdx.input.isTouched(i)) {
final int iX = Gdx.input.getX(i);
fire = fire || (iX < fireAreaMax); // Touch coordinates are in screen space
fast = fast || (iX > fastAreaMin);
}
}
if (fast) {
// speed things up
} else {
// slow things down
}
if (fire) {
// Fire!
}
另一种方法是设置一个 InputProcessor
获取输入事件(而不是像上面的例子那样“轮询”输入)。当指针进入其中一个区域时,您必须跟踪该指针的状态(以便在它离开时清除它)。
关于java - 如何在 Libgdx 中跟踪多个触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16876877/