Зачем снова вызывать NSTimer в этом коде, вместо того, чтобы повторять: ДА? - PullRequest
0 голосов
/ 28 марта 2010
- (void) applicationDidFinishLaunching:(UIApplication *)application
   {
    //set up main loop 
    [NSTimer scheduledTimerWithTimeInterval:0.033
    target:self selector:@selector(gameLoop:) userInfo:nil repeats:NO];
    //create instance of the first GameState 
    [self doStateChange:[gsMain class]];
   }
 - (void) gameLoop: (id) sender
   {
    [((GameState*)viewController.view) Update]; 
    [((GameState*)viewController.view) Render];
    [NSTimer scheduledTimerWithTimeInterval:0.033 target:self
    selector:@selector(gameLoop:) userInfo:nil repeats:NO];
   }

Этот код взят из книги по разработке игр для iPhone. Я не знаю, зачем методу gameLoop снова вызывать NSTimer? в applicationDidFinishLaunching он устанавливает NSTimer, почему бы не позволить ему делать это каждые 0,033 с, зачем добавлять тот же код NSTimer в метод gameLoop? ТГц.

Обновление: извините, мой вопрос следует уточнить ... ... Почему код не просто повторяет вызов: ДА?

Ответы [ 3 ]

0 голосов
/ 28 марта 2010

Это шутка? установить repeats:YES. Вы специально сказали это НЕ продолжать стрелять. Итак:

    - (void) applicationDidFinishLaunching:(UIApplication *)application
   {
    //set up main loop 
    [NSTimer scheduledTimerWithTimeInterval:0.033
    target:self selector:@selector(gameLoop:) userInfo:nil repeats:YES];
    //create instance of the first GameState 
    [self doStateChange:[gsMain class]];
   }

Это даже самодокументировано !!

0 голосов
/ 28 марта 2010

Вы, конечно, можете избежать поворотов: ДА:

    //set up main loop 
[NSTimer scheduledTimerWithTimeInterval:0.033
target:self selector:@selector(gameLoop:) userInfo:nil repeats:YES];

На самом деле, вам было бы лучше так, потому что синхронизация была бы более последовательной - код, который вы перечислили здесь, запускает новый таймер только после того, как вычислен кадр, что даст вам неправильные кадры, если эти вызовы будут варьироваться количество времени.

0 голосов
/ 28 марта 2010

Поскольку NSTimer создается с «повторениями: НЕТ», он запускается один раз, а затем автоматически аннулируется, тем самым предотвращая повторный запуск таймера.

Итак, каждый раз, когда вы используете «повторы: НЕТ», вам нужен новый таймер.

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