4

我正在实现一个根据当前可见区域动态加载背景图形的游戏。背景是使用 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 会忽略帧的空白区域?

提前致谢!

4

1 回答 1

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 现在打印

帧位置 = (50.000000, 50.000000, 50.000000, 50.000000)

于 2014-04-14T17:26:31.337 回答