ios - SpriteKit中的加速度计不起作用

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

我正在制作一个游戏,您应该能够通过左右倾斜设备来移动玩家。我正在为此使用加速度计。在我的 GameScene 类中,我在 Player 类中调用了 motionSetup,它执行以下操作:

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

然后在我的 GameScene 类的更新方法中,我在我的 Player 类中调用我的移动方法:
-(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)上运行并测试它时,无论我倾斜设备, Sprite 节点都会缓慢地向左移动。为什么?

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

最佳答案

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

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

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

关于ios - SpriteKit中的加速度计不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26833151/

相关文章:

objective-c - MFMessageComposeViewController 第一次分配需要几秒钟

ios - UIPageviewController 使用 Storyboard 崩溃

ios - 应用仅在特定设备上崩溃

ios - 我如何向 CoreData 指示对象已更改?

swift - SKTransition效果在transiting时不起作用怎么解决?

ios - UICollectionView indexPath.row 奇怪的行为

ios - 如何对多对多关系的属性使用 sortDescriptor

ios - 加载 View Controller 后的画外音顺序

swift - 以编程方式将按钮添加到 GameScene.swift 并在按下时转换场景

ios - 如何在 Sprite Kit 中预加载纹理?