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与Coportable使用?

编辑:这是我为演示问题而创建的简单测试项目。

coremotion应配合使用。这是我在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:处理运动事件,而是尝试在handleDeviceMotion方法中明确访问deviceMotion属性,该方法将由重复计时器调用。

-(void) handleDeviceMotion {
    CMDeviceMotion *motion = [self.motionManager deviceMotion];
    // use motion data accordingly
}    

并且完成后不要忘记停止更新!

[self.motionManager stopDeviceMotionUpdates];

对于这种设备运动,我们有一系列相当分层的问题,我(希望)在下一个SDK更新中解决了这些问题。我已经实施了偏航,俯仰和滚动,它们似乎给出了相对理智的值。如果您还在遇到问题,请通过电子邮件发送SDK(@)Apportable.com(显然删除Parens)并提及我。

相关内容

  • 没有找到相关文章

最新更新