我正在寻找一些帮助以集成UIAccelerometer
到我cocos2d
的基于应用程序中。我目前的设计大致如下:
1 --我的HelloWorldLayer
层有一个私有变量——一个名为的类Manager
——我将其称为数据管理器。它是向 UI 提供信息的主要数据管理类。
2 --的HelloWorldLayer
更新方法调用数据管理器的更新方法。
3 --数据管理器分配一个新对象——一个名为的类accelerationMeter
——它提供加速度计数据并更新我用来跟踪设备当前加速度的自定义数据对象。
4 --该类accelerationMeter
设置加速度计,如下所示:
-(id) init
{
if (self == [super init])
{
// the below call is only used if this object extends CCLayer. Right now it extends NSObject
// self.isAccelerometerEnabled = YES;
[[UIAccelerometer sharedAccelerometer] setUpdateInterval: 1/60];
[[UIAccelerometer sharedAccelerometer] setDelegate: self];
// my data type to store acceleration information
self.currVector = [[vector alloc] init];
}
return self;
}
// method called when the UIAccelerometer updates
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[self currVector].x = acceleration.x;
[self currVector].y = acceleration.y;
NSLog([NSString stringWithFormat:@"accelerometer: x = %f, y = %f",self.currVector.x,self.currVector.y]);
}
5 --在从 成功收集数据 1 秒后(看似准确),“加速度计”方法中UIAccelerometer
的行停止记录。NSLog
因此,委托方法停止被调用。
6 --根据要求,这是我用来集成加速度计的代码:
// source: HelloWorldLayer.mm
// purpose: update scene
-(void) update: (ccTime) dt
{
<snip>
world->Step(dt, velocityIterations, positionIterations);
[self updateData];
<snip>
}
// source: HelloWorldLayer.mm
// purpose: update data and use that for the accelerometer display
-(void) updateData
{
if(dataManager)
{
[dataManager update]
<snip>
float accelX = [dataManager currentAcceleration].x;
float accelY = [dataManager currentAcceleration].y;
<snip>
}
}
// source: Manager.m (the data manager class)
// called by updater method copied above this
-(void) update
{
// replace outdated current accleration with the updated current accel
// right now, the accelMonitor class just returns the value of the current acceleration so I will omit the monitor class
currentAcceleration = [accelMonitor getCurrent];
NSLog(@"Manger: Update called");
}
// source accelerationMeter.m
// called by (through an intermediate class) Manager
// I have verified that this method continues to be called after the accelerometer stops working
-(vector*) getCurrentAcceleration
{
NSLog(@"accelerationMeter: getCurrentAcceleration called");
return self.currVector;
}
注意我没有使用 IOS 模拟器——我正在从设备的控制台读取日志。
我的主要问题如下:
A -- 为什么加速度计的委托方法会停止执行?
B -- 我怎样才能解决这个问题,以便我可以使用加速度计数据超过 1 秒?