"scheduleTimerWithTimeInterval:" проблема в cocos2d? - PullRequest
0 голосов
/ 04 февраля 2009

Я пытаюсь разработать приложение для iPhone, используя cocos2d. Я использовал «scheduleTimerWithTimeInterval» для вызова метода, который вызывает фиксированный интервал времени Но теперь временной интервал увеличивается постепенно. по этой причине время постепенно увеличивается. вот мой код:

- (void) methodTime: (id) sender{

    NSTimer *rat =[NSTimer scheduledTimerWithTimeInterval:(.5) target:self selector:@selector(rotation:) userInfo:nil repeats:YES]; 
}

- (void) rotation:(NSTimer *)theTimer{

    NSLog(@"I m  # %i", i);
    i=i+10;   // Here , i is a global int variable.
    i=i % 1440;
        if(i==0){
            [theTimer invalidate];

        }
        else {
         int rotationNum=i;
        Sprite *sp = [Sprite spriteWithFile: @"1.png"];
        sp.position=cpv(220,180.5);
        sp.rotation=rotationNum;
        [self add:sp];      
        }

}

Ответы [ 5 ]

2 голосов
/ 07 февраля 2009

Не используйте NSTimer. Ознакомьтесь с рекомендациями cocos2d .

2 голосов
/ 05 февраля 2009

Похоже, что каждые 0,5 секунды вы добавляете спрайт в некоторый список спрайтов. В конечном итоге список становится очень большим, и все эти данные приводят к тому, что выполнение вашего метода занимает более 0,5 секунды. Это приводит к тому, что таймер срабатывает так быстро, как и может, что не так уж и быстро, так как он всегда ожидает завершения вашего метода.

Не знаю больше о вашем коде, это мое лучшее предположение.

0 голосов
/ 05 февраля 2009

Я бы использовал встроенные в Cocos2d-iphone интервалы.

Пройдите через демонстрационный проект cocos, и вы увидите, как подобные вещи «должны» выполняться в рамках cocos.

0 голосов
/ 04 февраля 2009

Если все, что вы делаете, это непрерывное вращение объекта, то лучше сделать CATransforms и Core Animation.

0 голосов
/ 04 февраля 2009

У меня были проблемы с пониманием вашего вопроса. Вы даже не использовали одну кавычку в своем «вопросе».

Возможно ли, что вашему коду требуется более 0,5 секунды для выполнения? Тем более, что объем работы, выполняемой в фоновом режиме, увеличивается с каждой итерацией. (Больше спрайтов.)

Попробуйте сделать эту функцию быстрее, например, загрузить этот PNG в память и не загружать его каждый раз из файла. (В любом случае, это лучше для памяти.)

Кстати: этот цикл выглядит опасно, как бесконечный цикл. (Хотя может быть, что это работает ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...