检查精灵是否正在移动

时间:2015-06-29 20:32:39

标签: sprite-kit avaudioplayer cmmotionmanager

我有一个应用程序,我使用motionManager.gravity

移动一个节点

这是我的代码

self.motionManager = [[CMMotionManager alloc] init];
    self.motionManager.deviceMotionUpdateInterval = 0.005f;

    self.motionQueue = [[NSOperationQueue alloc] init];
    self.motionQueue.name = [[[NSBundle mainBundle] bundleIdentifier] stringByAppendingString:@".motion"];



    self.updatePosition = NO;

    [self.motionManager startDeviceMotionUpdatesToQueue:self.motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {


        @synchronized(self) {
            NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

            [formatter setNumberStyle:NSNumberFormatterDecimalStyle];

            [formatter setMaximumFractionDigits:2];

            [formatter setRoundingMode: NSNumberFormatterRoundUp];


            {


                numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.gravity.x / 20.0 *200]];
                numberStringy = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.gravity.y / 20.0 *200]];
                n = [numberString intValue];

                /*NSLog(@"ball.center x:%d",n);*/
                y = [numberStringy intValue];

                /*NSLog(@"ball.center y:%f",balla.center.y);*/

            }
            self.gravity = motion.gravity;
            self.updatePosition = YES;
        }
    }];

然后我使用displayLink来更新和移动精灵节点。一切都很好,我可以让节点停在边缘和屏幕上的特定位置。我想知道的是,有没有办法看到节点正在移动或停止: 在边缘 2.按代码在特定地点。 3.设备保持水平,因此加速度计不产生任何 n或y数大于0。

我希望在精灵节点移动时播放声音但在精灵节点不移动时停止声音。
有什么想法吗?

1 个答案:

答案 0 :(得分:0)

SKPhysicsBody有一个名为resting的属性。用它来测试运动。

if(myNode.physicsBody.resting) {
    // node is not moving
} else {
    // node is moving
}

如果您只想检查某个轴的移动,也可以使用velocity属性。