1

有什么方法可以限制用户手势的持续时间吗?例如,用户可以拖动一个精灵,但从 cctouch 开始,它只能持续 3 秒。持续时间过后,应用程序将自动触发 cctouch end 方法。

4

2 回答 2

2

我建议使用块来安排计时器。避免在 Cocos2D 中使用 NSTimer,因为它不允许内置的暂停/恢复功能。

安排如下:

- (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];
}
于 2013-04-22T17:38:38.330 回答
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);
...
}
于 2013-04-22T16:23:12.117 回答