我刚刚完成了一个简单的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事件?
谢谢:))
答案 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表示第四个手指触摸屏幕。