2012-05-12 103 views
1

是否有任何方法可以将一小部分秒的延迟添加到循环中(例如A for循环)。即每次迭代之后我想要一个短暂的延迟。在循环中添加延迟

我知道cocos2d允许您延迟安排选择器。但我不确定在这种情况下如何使用它。

我也知道,睡眠是昂贵的,不建议。

有什么建议吗?

+0

希望你不会在主(UI)线程上做这种延迟,否则你的用户会注意到这一点,而不会对你感到满意。 –

+0

我不确定,但是'sleep()'可能在这里很有用。 – SmartTree

回答

0

你可以用C的睡眠功能:

sleep(seconds); 

但你也可以看看UITimer,也可能是基于块的performSelector:withObject:afterDelay:方法。

更多基于NSObject的的方法请参见本:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay

+0

我不确定睡眠是否正确,因为它会暂停所有处理。我仍然希望应用程序能够做其他事情。 – plawres

+0

也许我可以让该方法以延迟递归调用它自己。 – plawres

+0

有没有办法让当前的方法暂停,但暂停时它仍然处理任何其他计划的任务? – plawres

2

在cocos2d,则不应使用NSTimers。如果你想有可能暂停你的游戏,它会造成麻烦。

如果你想在迭代之间循环一些具有固定延迟的动作,你可以自由的使用scedule:interval:方法来获得所需的延迟。

[self schedule:@selector(methodToScedule) interval:yourDelay] 

或者如果您必须做随机延迟,您可以使用cocos2d操作的顺序。例如

- (void) sceduleMethod 
{ 
    // do anything you want 

    ccTime randomDuration = // make your random duration 
    id delayAction = [CCDelayTime actionWithDuration: randomDuration]; 
    id callbackAction = [CCCallFunc actionWithTarget:self selector:@selector(scheduleMethod)]; 
    id sequence = [CCSequenece actionOne: delayAction actionTwo: callbackAction]; 
    [self runAction: sequence]; 
} 

在这种情况下,您必须只调用一次您的方法。然后它会以给定的延迟召唤自己。

+0

谢谢你的帮助 – plawres