Я использую XCode 5. Я делаю игру с помощью Cocos2D. И хотите, чтобы некоторые функции повторялись последовательно и один за другим. Из-за многих действий, выполняемых одновременно, так же требуется и задержка (с помощью которой никакое действие не мешает следующему, а не отменяет эффект предыдущего или пересматривает и выполняет функцию немедленно).приложение зависает, а не устройство зависает. В игре с использованием cocos2d
Интерфейс My замерзает, а в Debug Navigator потребление процессора достигает 99-100%, а память постепенно увеличивается и продолжает увеличиваться. Я также поставил точку останова исключений. Но никаких исключений не возникает.
Я использую этот код
-(void)threadMainRunLoop
{
BOOL exitNow = NO;
int loopCount = 1;
[self function1];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
// Add the exitNow BOOL to the thread dictionary.
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
[threadDict setValue:[NSNumber numberWithBool:exitNow] forKey:@"ThreadShouldExitNow"];
// Install an input source.
[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(function2) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(function3) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(function4) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.7 target:self selector:@selector(function5) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(function6) userInfo:nil repeats:NO];
while (loopCount <= 4 && !exitNow)
{
// Do one chunk of a larger body of work here.
// Change the value of the moreWorkToDo Boolean when done.
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(function2) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(function3) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.4 target:self selector:@selector(function4) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:0.7 target:self selector:@selector(function5) userInfo:nil repeats:NO];
[NSTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(function6) userInfo:nil repeats:NO];
// Run the run loop but timeout immediately if the input source isn't waiting to fire.
[runLoop runUntilDate:[NSDate dateWithTimeInterval:5.0 sinceDate:[NSDate date]] ];
// Check to see if an input source handler changed the exitNow value.
exitNow = [[threadDict valueForKey:@"ThreadShouldExitNow"] boolValue];
++loopCount;
}
}
И вызов этой функции в ccTouchesEnded:withEvent:
.
Я выполнил этот код из Thread Management из «Листинг 2-3 Проверка условия выхода в течение длительного времени».
Является ли мой NSRunLoop моей игрой/интерфейсом для замораживания ???
Помните устройство в вешалке. И функции1-6 обновляют пользовательский интерфейс. А также, когда игра замерзнет, не ожидается, может быть через какое-то время или после долгого времени или даже может не замерзнуть.
Заранее благодарен.
Если я использую cocos2d встроенный 'scheduleSelector: interval:', то он не будет работать должным образом, поскольку действия будут перекрываться, а графики будут перенесены с 0.000 на 0.000. Потому что в то время как цикл будет работать в микросекундах. Итак, мне нужна такая техника, по которой цикл запускается через некоторое время или после завершения предыдущих действий. Какие-либо предложения??? – eagle
переосмыслить то, что вы пытаетесь сделать ... вы, вероятно, хотите использовать CCSequence и/или действия CCCallBlock для создания и запуска следующей последовательности – LearnCocos2D
Я использовал действия CCSequence и CCCallBlock там, где это необходимо. но в каждой функции1-6 в некоторых разных условиях выполняется соответствующее действие в зависимости от результатов, полученных из предыдущей функции. Таким образом, он не может выполнять его в одиночной функции, используя действия CCSequence и CCCallBlock. – eagle