Вы не должны делать никакой специальной вещи; просто извлечение от архива до некоторого каталога и запуска./затмение оттуда.
Если вы не хотите использовать NSTimer
, вы можете попробовать запустить NSRunLoop
вручную:
static BOOL shouldContinueGameLoop;
static void RunGameLoop() {
NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
NSDate *destDate = [[NSDate alloc] init];
do {
// Create an autorelease pool
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Run the runloop to process OS events
[currentRunLoop runUntilDate:destDate];
// Your logic/draw code goes here
// Drain the pool
[pool drain];
// Calculate the new date
NSDate *newDate = [[NSDate alloc] initWithTimeInterval:1.0f/45 sinceDate:destDate];
[destDate release];
destDate = newDate;
} while(shouldContinueGameLoop);
[destDate release];
}
Другой вариант с iPhoneOS 3.1 - использовать новый API CADisplayLink. Это вызовет указанный вами селектор, когда необходимо обновить содержимое экрана.
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(renderAndUpdate)];
[displayLink setFrameInterval:2];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
Новый шаблон проекта OpenGL в XCode также использует CADisplayLink, если вам нужен еще какой-то пример кода.
Хотя использование CADisplayLink является действительно хорошей альтернативой для игр на основе 3.1,
все, что использует "Таймер", является действительно плохая идея.
Лучшим подходом является старая добрая «тройная буферизация» для разделения работы графического процессора.
Фабьен дал очень хорошее объяснение в своем обзоре Doom Iphone:
http://fabiensanglard.net/doomIphone/
Что касается статьи Фабьена CADisplayLink и Doom для iPhone, я написал Фабьену по электронной почте и считаю, что лучший вариант - субъективный. С точки зрения производительности DisplayLink и тройная буферизация должны быть одинаковыми, но DisplayLink доступен только в> OS 3.1. Так что это должно быть вашим определяющим фактором.
Позаботьтесь о том, чтобы использовать self
в качестве цели для displayLinkWithTarget
, в руководстве говорится: «Недавно созданная отображаемая ссылка сохраняет цель».
Мартин