SpriteKit中的加速度计无法正常工作

时间:2014-11-09 20:47:08

标签: ios objective-c sprite-kit accelerometer core-motion

我正在制作一款游戏,你可以通过向左和向右倾斜设备来移动玩家。我正在使用加速度计。在我的GameScene类中,我在我的Player类中调用movingSetup来执行此操作:

-(void)movementSetup {
  self.motionManager = [[CMMotionManager alloc]init];
  self.motionManager.accelerometerUpdateInterval = 0.2;
  [self.motionManager startAccelerometerUpdates];
  self.accelerometerData = self.motionManager.accelerometerData;
}

然后在我的GameScene类的update方法中,我在我的Player类中调用我的move方法:

-(void)movement {
  CGVector moveLeftVector = CGVectorMake(-1, 0);
  CGVector moveRightVector = CGVectorMake(1, 0);
  if (fabs(self.accelerometerData.acceleration.x)<1) {
      SKAction *moveLeft = [SKAction moveBy:moveLeftVector duration:0.2];
      [self.aPlayer runAction:moveLeft];
  }
  if (fabs(self.accelerometerData.acceleration.x)>1) {
      SKAction *moveRight = [SKAction moveBy:moveRightVector duration:0.2];
      [self.aPlayer runAction:moveRight];
  }

}

我还在我的播放器类中声明了3个属性:SKSpriteNode * aPlayer,CMMotionManager * motionManager和CMAccelerometerData * accelerometerData。

当我运行它并在我的设备(iPhone 6)上测试时,无论我倾斜设备,精灵节点都会慢慢向左移动。为什么呢?

编辑:一段时间后我也收到了内存警告

1 个答案:

答案 0 :(得分:0)

我刚刚发现了我做错了什么:

首先将self.accelerometerData = self.motionManager.accelerometerData移动到移动方法,以便每帧都更新。

然后将小于等于值的值更改为低于1的值,因为加速度计不会获得高于1的值;