我在 Stack Exchange 游戏开发网站上问了这个问题,关于如何结合轻击和长按手势识别器,得到以下答案:
处理这个问题的方法是在对方点击电话后设置一个计时器。您要实现的最用户友好的场景如下所示:
- 当您检测到点击时,设置一个计时器(t = timeToRepeat)
- 在每一帧上,将计时器减少 dt
- 如果计时器达到零,将精灵移动一个图块并重置计时器
- 如果用户在计时器的第一个周期之前松开手指,则将精灵移动一格
显然,您设置计时器的时间量将决定您的精灵移动的速度。根据您想要的行为类型,此主题有一些变化。例如,您可以在检测到点击后立即移动精灵一次并忽略步骤#4。
我同意这是这样做的方法,所以我正在尝试实现这一点并提出了以下代码:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//This records the time when the user touches the screen
self.startTime = [NSDate date];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSTimeInterval temp = [self.startTime timeIntervalSinceNow];
NSTimeInterval holdTime = temp * -1;
if(holdTime < self.threshold) {
//Tap
}
else {
//Hold
}
}
这段代码有效,但我意识到我应该在用户按住屏幕时调用计时器代码,而不是在他们完成之后。那么有没有办法在用户按下时调用 touchesEnded 中的代码?