В игре для OS X это рекомендовалось как способ получения событий клавиатуры и мыши.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for(;;)
{
NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
if(!event) break;
processevent(event);
...
}
[pool release];
, который вызывается в основном цикле игры (его кроссплатформенность).
Начиная с самых последних версий OSX 10.5.X этот вызов внезапно занимает много миллисекунд на событие, когда доступно событие, и частота кадров игры изменяется каждый раз, когда событие появляется. Если есть несколько событий, это может занять до 10 мс на кадр на более медленном Mac.
Кто-нибудь знает, почему это так? Или что я могу сделать, чтобы получать события, не оказывая сильного влияния на игру?
Я пытался управлять событиями мыши сам, получая положение мыши вручную и когда она приближается к краю экрана, деформируя его к центру, но это вызывает заминку в движении (конечно, только когда курсор скрыт ).
Другими альтернативами может быть получение информации от менеджера HID, что мы уже делаем для джойстиков, но HID не совсем понятен.
Чем быстрее Mac, тем больше заметны эти проблемы с получением событий.