SpriteKit中的加速度计不起作用

Posted

技术标签:

【中文标题】SpriteKit中的加速度计不起作用【英文标题】:Accelerometer in SpriteKit not working 【发布时间】:2014-11-09 20:47:07 【问题描述】:

我正在制作一款游戏,您应该能够通过左右倾斜设备来移动玩家。我正在为此使用加速度计。在我的 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) 上运行并测试它时,无论我倾斜设备,精灵节点都会缓慢地向左移动。为什么?

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

【问题讨论】:

在每个加速度计事件上运行一个新动作是完全矫枉过正的,而只是将加速度应用于节点的位置 谢谢!我对此很陌生 【参考方案1】:

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

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

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

【讨论】:

以上是关于SpriteKit中的加速度计不起作用的主要内容,如果未能解决你的问题,请参考以下文章

加速度计在 iphone4 上不起作用

基于 Arduino 的加速度计鼠标的 Python 脚本不起作用

加速度计服务在 Android TV Box 上不起作用

加速器在 Python Tkinter 中不起作用:如何修复 [重复]

SpriteKit 自定义 UIScrollView 带加速

标签的 Excel 用户表单加速键不起作用