Sprite Kit:用于更新SKShapeNodes的递归函数

时间:2014-04-11 23:55:57

标签: ios recursion sprite sprite-kit

我想创建一个SKNode,它有光线(带线路径的SKShapeNodes)作为子节点。如果障碍物像墙一样发生,这些光线应该被修剪。

enter image description here

我使用以下算法根据障碍物计算射线的长度:

- (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方法吗?这是计算光线长度变化的有效方法,还是递归方法调用(每帧)会影响性能?有没有更好的解决方案呢?

0 个答案:

没有答案