好的,所以在我的业余时间创建游戏时,在尝试围绕以下场景进行编码时,我已经完全陷入困境:
我想捕捉点击事件(TouchEvent.ACTION_DOWN
),然后以500毫秒的间隔,我想检查屏幕是否仍然按下,并无限制地重复相同的操作。
所以,我开始时:
switch (myTouchHandler.getAction()) {
case (TouchEvent.ACTION_DOWN):
case (TouchEvent.ACTION_MOVE):
if (inputIntervalTooSoon()) return true;
//do the magic i intend to do....
}
....
private boolean inputIntervalTooSoon() {
final long now = System.currentTimeMillis();
if ((now - lastTouchEventTime) < 500) return false;
lastTouchEventTime = now;
return true;
这会产生它将等待500毫秒的效果,但它不会立即检测到我的手指是否仍然按下。如果我稍微移动手指,它会再次拾起它,然后再回到休眠状态。
如果我不包含Interval功能,我的动作就会不断激发。如何更好地实现这一点的任何想法将不胜感激。
答案 0 :(得分:3)
我可以想象一个在TouchEvent.ACTION_DOWN上启动的Timing线程,它将在一个休眠500ms的循环内启动并运行。在睡眠之后,它将能够执行其检查,这将执行您的自定义处理以及检查TouchEvent.ACTION_UP是否发生(您必须在EventHandler中记录)。
当然需要一些同步。
这有意义吗?
有些事情如下:
boolean upHappened;
switch (myTouchHandler.getAction()) {
case (TouchEvent.ACTION_DOWN):
upHappened = false;
new Thread(new TimerRunnable()).start();
case (TouchEvent.ACTION_UP):
case (TouchEvent.ACTION_CANCEL):
upHappened = true;
}
class TimerRunnable implements Runnable {
public void run() {
while(true) {
Thread.sleep(500);
if(upHappened) break;
//custom processing
}
}
}
答案 1 :(得分:0)
屏幕将被按下,直到你有一个带有ACTION_UP或ACTION_CANCEL动作的事件,所以我会反向检查。