gpt4 book ai didi

java - LibGDX - 使用 InputProcessor 进行多点触控处理

转载 作者:行者123 更新时间:2023-12-01 18:18:54 27 4
gpt4 key购买 nike

一段时间以来,我一直在尝试在我的 Android 游戏中设置适当的多点触控支持。对于输入处理,我使用我的InputHandler(实现InputProcessor)。我用这样的东西

    @Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
screen.renderer.cam.unproject(touchPos);
if (left.isTouchDown((int) touchPos.x, (int) touchPos.y)) {
player.setMovingLeft(true);
player.leftPressed();
}

还有这个

    @Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
screen.renderer.cam.unproject(touchPos);
if (left.isTouchUp((int) touchPos.x, (int) touchPos.y)) {
player.setMovingLeft(false);
player.leftReleased();
}

我已经设置了 3 个这样的按钮,但我不知道为什么它不起作用。我发现的所有答案在使用 InputProcessor 时都没有多大帮助。

我知道它与触摸指针和迭代输入有关,但不幸的是,这就是我的知识的终点。

代码“触摸时”和“释放时”肯定有效,我使用它的方式与键盘输入相同。唯一的问题是多点触控。

最佳答案

我曾经遇到过类似的问题,尝试在屏幕上设置 3 个按钮。这些按钮可以单独按下(那么没有问题,你总是只使用一根手指和一个指针 - 因此指针 ID 可以忽略),但如果按下任意两个按钮,或者玩家按下所有按钮,它们也应该做出正确的 react 立刻。您必须使用由InputProcessor 给出的指针ID。指针 ID 是一个 0 到 9 范围内的整数(对于 10 个手指)。我就是这样做的:

首先为三个指针声明了三个变量:

int forwardPointer, leftPointer, rightPointer;

然后在 TouchDown 方法中,我检查了哪个手指按下了哪个按钮(是第一次、第二次还是第三次按下?),并将这些信息存储在我的变量中以供将来使用。

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if (game.forwardButton.contains(screenX, screenY)) {
game.forwardButton.isPressed=true;
forwardPointer=pointer;
}
if (game.leftButton.contains(screenX, screenY)) {
game.leftButton.isPressed=true;
leftPointer=pointer;
}
if (game.rightButton.contains(screenX, screenY)) {
game.rightButton.isPressed=true;
rightPointer=pointer;
}}

然后,在 TouchUp 方法中,我检查了哪个手指被抬起(通过将 TouchUp 方法中的指针 ID 与存储的指针变量值进行比较),并根据此,我“释放”了正确的按钮。

    @Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
if (pointer==forwardPointer) {
game.forwardButton.isPressed=false;
}
if (pointer==leftPointer) {
game.leftButton.isPressed=false;
}
if (pointer==rightPointer) {
game.rightButton.isPressed=false;
}}

这对我有用。无需使用 Gdx.input.getX()、Gdx.input.getY(),因为这些值已由 touchDown 和 touchUp 方法(screenX 和 screenY)给出。

关于java - LibGDX - 使用 InputProcessor 进行多点触控处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com