Java 在不抬起手指的情况下检测刷卡手势
我正在用libgdx为android开发一个游戏,我有一个小问题,我想让它在用户刷卡时触发一个函数,这是我实现的。问题是,当您完成刷卡(当您抬起手指时)时,它会运行该功能。在刷卡时,如何使函数运行 这是手势侦听器的当前代码:Java 在不抬起手指的情况下检测刷卡手势,java,android,libgdx,Java,Android,Libgdx,我正在用libgdx为android开发一个游戏,我有一个小问题,我想让它在用户刷卡时触发一个函数,这是我实现的。问题是,当您完成刷卡(当您抬起手指时)时,它会运行该功能。在刷卡时,如何使函数运行 这是手势侦听器的当前代码: private static class DirectionGestureListener extends GestureAdapter{ DirectionListener directionListener; public DirectionGest
private static class DirectionGestureListener extends GestureAdapter{
DirectionListener directionListener;
public DirectionGestureListener(DirectionListener directionListener){
this.directionListener = directionListener;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
if(Math.abs(velocityX)>Math.abs(velocityY)){
if(velocityX>0){
directionListener.onRight();
}else{
directionListener.onLeft();
}
}else{
if(velocityY>0){
directionListener.onDown();
}else{
directionListener.onUp();
}
}
return super.fling(velocityX, velocityY, button);
}
}
游戏场景:
Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() {
@Override
public void onUp() {
/*something*/
}
@Override
public void onRight() {
/*something*/
}
@Override
public void onLeft() {
/*something*/
}
@Override
public void onDown() {
/*something*/
}
}));
我研究了libgdx源代码本身<每当发生touchUp()
事件时,将执行code>fling()。因此与你的经历相一致
我认为实现这一点的一个选择是,通过扩展InputAdapter
类或实现InputProcessor
接口类,自己实现这样的手势检测,然后使用touchDown()
,以及TouchDrawed()
,以达到预期的效果
我们的想法是,当触摸id第一次在touchDown()
内部的屏幕上触摸时,跟踪它(它的第三个参数是您正在查看的int button
),然后使用该id在touchDrawed()
内部进行检查和进一步操作。若id匹配,那个么对于简单的方法,您可以通过将其与原始触摸位置进行比较来检查用户是否触摸并移动了预定义的距离
比方说,我们只想在用户第一次触摸屏幕,移动屏幕(至少)我们预先设定的距离,并且在预先设定的持续时间内,使用滑动手势。因此,如果用户首先触摸屏幕,移动手指,但仍然不超过预定义的距离,然后在我们设置的持续时间内移动足够远,这仍然不会被视为我们设置的条件,即必须从第一个意图(第一次触摸)开始做这样的手势。这意味着我们根据原始接触点计算距离,而不是移动点。当然,您也可以自定义条件以满足您的需要
从上面可以看出,将其视为滑动手势的条件可以包括以下内容(您可以自己进行调整)
- 它相对于原始接触点移动的距离
- 移动所需的持续时间(可能是150毫秒等),持续时间较长的用户可以更轻松地不快速地将其注册为滑动手势
- 一次只能进行1次刷卡,即如果用户同时使用2个手指(2次触摸)刷卡,则只能使用第一个(或最后一个)作为刷卡效果,等等
touchdrable()
中添加处理代码,以检查两个方向,并向您发送相应的事件,即swipe-x或swipe-y本身。然后你通过调用你的一个方法让你的游戏知道它