我正在实施一款动态加载背景图形的游戏,具体取决于当前可见区域。使用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会忽略帧的空白区域?
提前致谢!
答案 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)