是否有任何方法可以限制用户手势的持续时间?例如,用户可以拖动精灵,但是从cctouch开始,它只能持续3秒。持续时间后,应用程序将自动触发cctouch结束方法。
答案 0 :(得分:2)
是的,这是实现这一目标的简单策略。当用户开始意识到手势时,您可以启动计时器,当计时器点击时,停止计时器。
-(void) timerDidTick:(NSTimer *)theTimer{
cpMouseRelease(mouse);
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
NSTimer *aTimer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(timerDidTick:) userInfo:nil repeats:NO] ;
[[NSRunLoop mainRunLoop] addTimer:aTimer forMode:NSRunLoopCommonModes];
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
cpMouseGrab(mouse, touchLocation, false);
...
}
答案 1 :(得分:2)
我建议使用块安排计时器。避免将NSTimer与Cocos2D一起使用,因为它不允许内置暂停/恢复功能。
安排如下:
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
[[self scheduler] scheduleBlockForKey:@"menu" target:self interval:3.0f repeat:0 delay:0 paused:NO block:^(ccTime dt)
{
// perform end of touch actions here
}];
}
如果用户在调用计时器之前做任何你想做的事情(可能是ccTouchEnded / ccTouchCancelled),也要确保取消计划阻止:
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
[[self scheduler] unscheduleBlockForKey:@"menu" target:self];
}