我想创建一个SKNode,它有光线(带线路径的SKShapeNodes)作为子节点。如果障碍物像墙一样发生,这些光线应该被修剪。
我使用以下算法根据障碍物计算射线的长度:
- (CGPoint) binaryRayCastingFromRadius: (CGFloat) min toRadius: (CGFloat) max andAngle: (CGFloat) radiant {
NSUInteger mid = min + abs(min-max)/2;
CGPoint point = [Calculator calcPointOnCircleWithRadius: mid andRad: radiant andPosition: P(0, 0)];
SKPhysicsBody *body = [[[self scene] physicsWorld] bodyAlongRayStart: self.position end: [self convertPoint: point toNode: self.scene]];
if (body && body.categoryBitMask == obstacleCategory)
return [self binaryRayCastingFromRadius: min toRadius: mid-1 andAngle: radiant];
else if (2 < abs(min-max))
return [self binaryRayCastingFromRadius: mid toRadius: max andAngle: radiant];
else
return point;
}
代码效果很好。但是,我应该在哪里调用此方法来更新光线的新长度?
我应该用-(void)update:(CFTimeInterval)currentTime
方法吗?这是计算光线长度变化的有效方法,还是递归方法调用(每帧)会影响性能?有没有更好的解决方案呢?