【发布时间】:2014-07-30 07:47:02
【问题描述】:
请帮我解决这个困惑。
来自 Sprite Kit 编程指南:
sprite 节点的 anchorPoint 属性决定了节点中的哪个点 frame 位于精灵的位置。
我对此的理解是,如果我改变锚点,精灵的位置应该保持不变,只有纹理渲染应该相应地移动。
但是当我设置锚点时,我的精灵的位置实际上发生了变化!看看这个sn-p:
/* debug */
if (self.currentState == self.editState) {
printf("B: relativeAnchorPoint = %.02f,%.02f ", relativeAnchorPoint.x, relativeAnchorPoint.y);
printf("position = %.02f,%.02f\n",self.position.x, self.position.y);
}
[self setAnchorPoint:relativeAnchorPoint];
/* debug */
if (self.currentState == self.editState) {
printf("A: relativeAnchorPoint = %.02f,%.02f ", relativeAnchorPoint.x, relativeAnchorPoint.y);
printf("position = %.02f,%.02f\n",self.position.x, self.position.y);
}
输出:
A:relativeAnchorPoint = 0.65,0.48 位置 = 1532.00,384.00
B:relativeAnchorPoint = 0.65,0.48 位置 = 1583.00,384.00
我错过了什么?
提前致谢
*编辑:附加信息:* 只有当我的精灵将 xScale 设置为 -1 以反转图像时才会发生这种情况
【问题讨论】:
-
精灵的位置是锚点,所以当你改变锚点时它会移动。
-
@Code Monkey 是一个误解,节点的位置是它所在的位置,anchorPoint 不会(不应该)改变节点的位置,它只确定位置 - 相对于节点的位置 -绘制节点的纹理
-
@LearnCocos2D 感谢您的澄清。
-
也许最好避免将 xScale 设置为 -1,而是使用预览应用程序(工具 > 水平翻转)反转图像。
-
@CodeMonkey,图像反转必须即时完成,因为我不想在我的代码中拥有每个精灵的重复图像,这会浪费大量内存......跨度>
标签: ios sprite-kit anchorpoint