2013-04-22 3 views
1

Есть ли способ, позволяющий ограничить продолжительность жестов пользователя? Например, пользователь может перетащить спрайт, но с начала cctouch он может длиться только 3 секунды. После продолжительности приложения будут автоматически запускать метод конца cctouch.Как ограничить длительность касания?

ответ

2

Я бы рекомендовал планировать таймер с использованием блоков. Избегайте использования NSTimer с Cocos2D, так как это не позволяет использовать встроенную функцию паузы/возобновления.

Schedule следующим образом:

- (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]; 
} 
+0

Хорошего ответа , Я новичок в Cocos, и я не знал этого о NSTimers. благодаря –

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); 
... 
} 
Смежные вопросы