2012-05-12 3 views
1

Можно ли добавить задержку доли секунды в цикл (например, цикл A). т. е. я хотел бы получить небольшую задержку после каждой итерации.Добавление задержки в цикле

Я знаю, что 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

Вы не должны использовать NSTimers в cocos2d. Это вызовет проблемы, если вы хотите иметь возможность приостановить игру.

Если вы хотите скопировать какое-то действие с фиксированной задержкой между итерациями, вы можете свободно использовать 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

Смежные вопросы