即使CGPath没有,SKShapeNode帧也包含点(0,0)

时间:2014-04-13 13:51:29

标签: ios objective-c sprite-kit cgpath skshapenode

我正在实施一款动态加载背景图形的游戏,具体取决于当前可见区域。使用SKShapeNode绘制背景。为了节省内存,我只绘制了CGPath的一小部分。问题是无论我使用什么CGPath坐标,SKShapeNode的结果帧将始终包含(0,0)点。这是一个例子:

SKShapeNode *shapeNodePos = [SKShapeNode node];
CGMutablePathRef pathPos = CGPathCreateMutable();
CGPathAddRect(pathPos, NULL, CGRectMake(50, 50, 50, 50));
shapeNodePos.path = pathPos;
CGPathRelease(pathPos);
NSLog(@"Frame pos = (%f, %f, %f, %f)", shapeNodePos.frame.origin.x, shapeNodePos.frame.origin.y, shapeNodePos.frame.size.width, shapeNodePos.frame.size.height);

结果是:

Frame pos = (0.000000, 0.000000, 100.000000, 100.000000)

但是,我希望SKShapeNode.frame仅限于CGPath内容:

Frame pos = (50.000000, 50.000000, 50.000000, 50.000000)

它是SpriteKit中的错误还是实际上是预期的行为?如果那个小的CGPath矩形被绘制得远离(0,0)点,它是否也会对性能产生负面影响,或者Sprite Kit会忽略帧的空白区域?

提前致谢!

1 个答案:

答案 0 :(得分:1)

从我的测试中看来,除非您在创建CGMutablePathRef之前专门设置节点的位置,否则起点始终为(0,0)。但是,事先设置节点的位置可以得到您期望的结果。

SKShapeNode *shapeNodePos = [SKShapeNode node];
shapeNodePos.position = CGPointMake(50, 50); // <<< Set node's position
CGMutablePathRef pathPos = CGPathCreateMutable();
CGPathAddRect(pathPos, NULL, CGRectMake(0, 0, 50, 50));
shapeNodePos.path = pathPos;
CGPathRelease(pathPos);

NSLog现在打印

  

框架pos =(50.000000,50.000000,50.000000,50.000000)