Огромная задержка касаний и акселерометр для Ipod Touch - PullRequest
0 голосов
/ 24 июня 2011

Я разрабатываю открытую игру для ios, которая требует акселерометр и мультитач. У меня есть EAGLView, который использует ESRenderer, где происходит рисование.

EAGLView реализует акселерометр и получает прикосновения:

@interface EAGLView : UIView <UIAccelerometerDelegate> { ...

прикосновения Начал, прикосновенияПеремещены и прикосновения закруглены также в этом классе.

Вся логика игры разбита на несколько классов c ++ по кросс-платформенным причинам, в drawView я отправляю акк. значения к игровой логике:

- (void)drawView:(id)sender
{
appAccelEvent(ax, ay, az);
if (sys_call == S_TOUCH_EVENT) {
    appTouchEvent(eventType, 0, cx0, cy0);
}
[renderer render];
}

Я использовал iphone с версией 3.1.3 в качестве тестового устройства, и все в порядке. но сейчас я тестирую его на ipod touch с версией 4.2.1, и задержка реакции сенсора и акселерометра в игре слишком велика, иногда между 1 и 2 сегментами.

Я думал, что это может быть какой-то буфер для интервала обновления акселерометра, который замедляет рендерер. Что еще может быть причиной этого отставания? Я действительно ценю любые предложения, чтобы исправить это.

1 Ответ

0 голосов
/ 24 июня 2011

Вы должны использовать CMMotionManager на iOS 4+, он сильно настроен Apple для производительности и точности. Используйте его в режиме опроса (периодически вызывая -deviceMotion) в игровом цикле, он будет гораздо более производительным, чем асинхронные уведомления, и столь же точным.

...