Apportable & CoreMotion
Я пытаюсь заставить мою игру работать на Android. Я перенес его с бесплатной версией Apportable, и она работает довольно хорошо, но я не смог реализовать функцию гироскопа.
CMMotionManager
инициализируется, но обновления движения никогда не запускаются (или, по крайней мере, handleDeviceMotion:
никогда не вызывается). Менеджер движения isAccelerometerActive
собственности всегда НЕТ, но isAccelerometerAvailable
Да.
С помощью [NSOperationQueue mainQueue]
тоже не помогает
Вот как я инициализирую менеджер движения:
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.gyroUpdateInterval = .2;
[self.motionManager startDeviceMotionUpdatesToQueue:[[NSOperationQueue alloc] init]
withHandler:^(CMDeviceMotion *motion, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self handleDeviceMotion:motion];
});
}];
Выдает следующее сообщение logcat:
E/Sensors ( 507): HAL:ERR open file /sys/bus/iio/devices/iio:device0/dmp_event_int_on to write with error 2
E/Sensors ( 507): HAL:ERR can't disable DMP event interrupt
Понятия не имею, что это значит... Я тестирую приложение на Asus Nexus 7.
Что мне нужно сделать, чтобы использовать CoreMotion с Apportable?
Изменить: вот простой тестовый проект, который я создал, чтобы продемонстрировать проблему.
2 ответа
CoreMotion должен работать с apportable. Вот упрощенная парадигма инициализации и использования, которую я протестировал на Nexus 7 (2012).
self.motionManager = [[CMMotionManager alloc] init];
[self.motionManager startDeviceMotionUpdates];
self.motionTimer = [NSTimer scheduledTimerWithTimeInterval:0.2
target:self
selector:@selector(handleDeviceMotion)
userInfo:nil
repeats:YES];
Вместо того, чтобы использовать startDeviceMotionUpdatesToQueue: withHandler:
чтобы обработать события движения, попробуйте явно получить доступ к deviceMotion
недвижимость в handleDeviceMotion
метод, который будет вызван повторяющимся таймером.
-(void) handleDeviceMotion {
CMDeviceMotion *motion = [self.motionManager deviceMotion];
// use motion data accordingly
}
И не забудьте остановить обновления, когда вы закончите!
[self.motionManager stopDeviceMotionUpdates];
В частности, для такого рода движений устройств у нас был довольно многоуровневый ряд проблем, которые я (надеюсь) решил с помощью следующего обновления SDK. Я реализовал рыскание, тангаж и крен, и они, кажется, дают относительно нормальные значения. Если у вас все еще есть проблемы, напишите sdk(@)apportable.com (очевидно, удалите символы) и сообщите мне.