使用 CoreMotion 移动 SKSpriteNode

Posted

技术标签:

【中文标题】使用 CoreMotion 移动 SKSpriteNode【英文标题】:Move SKSpriteNode with CoreMotion 【发布时间】:2014-06-16 21:22:56 【问题描述】:

我有一个代表用户的 SKSpriteNode,我希望这个节点随着用户的移动而移动,如果用户走路,那么节点会朝同一个方向移动。

起始位置是视图的中心,我认为可以使用 CMMotionManager (ios 7) 中的 rotationRate、userAcceleration 和重力使其工作,但我不知道我是否错了或我应该做什么操作使用这些值。

如果有人可以帮助我,我很感激。

谢谢。

【问题讨论】:

你能展示一下你到目前为止所做的尝试,以及给你带来了什么结果吗? 你可以在这里找到一个很好的使用加速度计和 SpriteKit 的教程:code.tutsplus.com/tutorials/… 【参考方案1】:

现在可以了

if ([self.motionManager isDeviceMotionAvailable] == YES) 
            [self.motionManager startDeviceMotionUpdatesToQueue:self.queueMotion withHandler:^(CMDeviceMotion *motion, NSError *error) 
                self.xpos = motion.userAcceleration.x * motion.gravity.x * motion.rotationRate.x;
                self.ypos = motion.userAcceleration.y * motion.gravity.y * motion.rotationRate.y;

                [self performSelectorOnMainThread:@selector(updatePosition:) withObject:nil waitUntilDone:YES];
            ];
        

然后我将这些 x 和 y 坐标添加到 SKSpriteNode 位置,并将 SKSpriteNode 移动到这个最终位置。我得到的是 SKSpriteNode 在我行走时不会移动,但如果我大力加速它会移动但只是片刻,如果我以恒定速度行走它不会移动。

【讨论】:

以上是关于使用 CoreMotion 移动 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CoreMotion 在空间中获取设备方向

Swift:CoreMotion 设备不移动,但记录加速度

iOS开发-CoreMotion框架

如何使用 Swift SpriteKit 在 For 循环中一一创建 SKSprite 节点

为 SKSprite 游戏创建登录页面

如何确定磁力计是不是需要校准 CoreMotion 参考系?