ios - SpriteKit : How can I determine when methods like applyImpulse on a physicsbody are done?

标签 ios sprite-kit ios8

我可以看到 here如何使用 update() 函数来监视 SKNode 上的“位置”等属性,但我不知道如何知道 [node.physicsBody applyImpulse:vector] 等方法已完成。

-(void)someMethod {
    _monitorOn = YES;
    [_node.physicsBody applyImpulse:CGVectorMake(10,10)];
}
-(void)update:(CFTimeInterval)currentTime {
   if( _monitorOn == YES ) {
       NSLog(@"node position: %f,%f", _node.position.x, _node.position.y);
   }
   // When will this be turned off?
 }

最佳答案

检查applyImpulse的效果是否完成有两种方法:

if (_node.physicsBody.resting) {
   // Node is at rest, do something
}

您经常会发现 resting 属性从未设置,因为您的 sprite 移动非常缓慢(尤其是对于圆形节点)。因此,最好检查速度是否接近于零。

static inline CGFloat speed(const CGVector v)
{
    return sqrtf(v.dx*v.dx+v.dy*v.dy);
}

if (speed(_node.physicsBody.velocity) < kSmallValue) {
   // Node is moving very slowly, do something
}

关于ios - SpriteKit : How can I determine when methods like applyImpulse on a physicsbody are done?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388324/

相关文章:

iphone - 为什么我的 Xcode4.5 没有 iPhone(Retina 4-inch) 和 iPhone(Retina 3.5inch)

ios - swift 4 约束动画无法正常工作

swift - 类别位掩码在 SpriteKit 中如何工作?(0xFFFFFFFF)

sprite-kit - 有没有办法使用 SKSpriteNode 和 PhysicsBody 参数用 Spritekit 制作软体?

ios - 如何下载 xcode 6 测试版?以及如何将 xcode 5 和 xcode 6 保存在同一台机器上?

ios - 无法将 Player 类型的值分配给 SKSpriteNode 类型

ios - 为单元测试禁用一些代码行

ios - 将 Sprite Kit Physics Body 移动到用户触摸的位置而不通过

swift - 如何比较结构数组以查看哪些元素不同?

ios - 如何在 SWIFT 的 UITableView 中选择行时添加图像,然后在取消选择行时将其删除