检查精灵是不是在移动

Posted

技术标签:

【中文标题】检查精灵是不是在移动【英文标题】:check to see if sprite is moving检查精灵是否在移动 【发布时间】:2015-06-29 20:32:38 【问题描述】:

我有一个应用程序,我在其中使用 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 更新和移动精灵节点。一切都很好,我可以让节点停在边缘和屏幕上的特定位置。我想知道的是是否有办法查看节点是移动还是停止: 1. 在边缘 2.在特定的地方通过代码。 3. 设备保持水平,因此加速度计不产生任何 n 或 y 大于 0 的数字。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于检查精灵是不是在移动的主要内容,如果未能解决你的问题,请参考以下文章

KeyListener 多久检查一次键盘输入? (Java 图形用户界面)

检查当前精灵节点

Phaser Framework - 检查精灵总旋转

无法让我的精灵沿着航点移动

检查是不是在其他视图中查看?

检查元素索引是不是在二维数组内(用于在任何方向移动一)