我可以看到here如何使用update()函数监视" position"等属性。在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?
}
答案 0 :(得分:4)
以下两种方法可以检查applyImpulse的效果是否已完成:
if (_node.physicsBody.resting) {
// Node is at rest, do something
}
您经常会发现静止属性从未设置过,因为您的精灵移动速度非常慢(特别是对于圆形节点)。因此,最好检查速度是否几乎为零。
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
}
答案 1 :(得分:0)
applyImpulse
只会为您的_node
添加一些速度;只有当你调用它并且在一帧之后“完成”时才会这样做。我认为你真正想要的是当_node
停止移动时(物理引擎会确定_node
的速度为零)。要检查此情况,您可以查看SKPhysicsBody
的{{3}}财产。只需在update:
循环中检查它;当true
_node
已停止时。
-(void)update:(CFTimeInterval)currentTime {
if( _monitorOn == YES ) {
NSLog(@"node position: %f,%f", _node.position.x, _node.position.y);
}
if( _node.physicsBody.resting ) {
NSLog(@"node is stopped");
}
}
注意: 您可能希望在某个位置设置一个添加标记,以便查看是否应该检查_node
是否为resting
,否则你将得到大量的“节点停止”消息。
-(void)someMethod {
_monitorOn = YES;
_appliedImpulse = 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);
}
if( _appliedImpulse && _node.physicsBody.resting ) {
_appliedImpulse = NO;
NSLog(@"node is stopped");
}
}