如何在libgdx中处理多个touchDragged事件?

时间:2015-01-20 04:26:31

标签: java android libgdx

我刚刚完成了一个简单的Android教程here 当您按右上角时,角色会跳跃。这是我正在使用的代码。

InputProcessor JUMP_PRESS = new InputProcessor() {

    ...

    @Override
    public boolean touchDown(int x, int y, int pointer, int button) {
        if((x > (5*width)/7 && y < (2*height)/7)) {
            controller.jumpPressed(); //make the character jump
        }
        return false;
    }

    @Override
    public boolean touchUp(int x, int y, int pointer, int button) {
        if (!Gdx.app.getType().equals(ApplicationType.Android))
            return false;
        if((x > (5*width)/7 && y < (2*height)/7)) {
            controller.jumpReleased();
        }
        return false;
    }

   ...

};

    ...some other processors for moving left and right...

InputMultiplexer mx = new InputMultiplexer();
    ...add the processors...

    ...

Gdx.input.setInputProcessor(mx);

我注意到,当手指在按住屏幕的同时移出跳跃区域时,角色将继续跳跃,直到最后在该区域调用touchReleased()

所以我尝试解决的问题是在每个处理器中添加touchDragged()方法:

public boolean touchDragged(int x, int y, int pointer) {
    if (!Gdx.app.getType().equals(ApplicationType.Android))
        return false;
    if(controller.getKeyFromHashMap(BobKeys.JUMP)) { //checks if currently jumping
        if(!(x > (5*width)/7 && y < (2*height)/7))
            controller.jumpReleased();
    }
    return false;
}

这解决了连续跳跃问题,但现在不幸的是我不能同时跳跃和移动(在touchDragged()方法之前,我可以) - 如果我向左移动然后跳跃,角色的整个水平运动停止马上。

如果没有一个停止下一个事件,我怎么能处理多个touchDragged事件?

谢谢:))

2 个答案:

答案 0 :(得分:0)

我要做的是创建一个while循环,测试指针是否在该框中,然后如果它离开你的区域就停止跳跃。

所以我将以下代码放入while循环中。

 @Override
    public boolean touchDown(int x, int y, int pointer, int button) {
        if((x > (5*width)/7 && y < (2*height)/7)) {
            controller.jumpPressed(); //make the character jump
        }
        return false;
 }

答案 1 :(得分:0)

如何在触摸时记住指针并检查触摸上而不是坐标?像这样:

private int jumpPointer;

@Override
public boolean touchDown(int x, int y, int pointer, int button) {
    if((x > (5*width)/7 && y < (2*height)/7)) {
        controller.jumpPressed(); //make the character jump
        jumpPointer = pointer;
    }
    return false;
}

@Override
public boolean touchUp(int x, int y, int pointer, int button) {
    if (pointer == jumpPointer && Gdx.app.getType().equals(ApplicationType.Android))
        controller.jumpReleased();
    }
    return false;
}

嗯,在我看来,指针有点奇怪。 TouchIndex可能更有意义,特别是指针已经具有一对非常明确的含义。指针值是介于0和n之间的值(在LibGDX中定义为20,实际上低得多),表示在多个同时触摸的情况下触摸事件发生的ORDER。因此,如果您有多个手指触摸,指针值0表示此触摸事件表示第一个手指触摸屏幕,而值3表示第四个手指触摸屏幕。