原来写一个需要居中的节点 node.setPosition(parent.width/2,parent.height/2)
现在需要写的 node.setPosition(parent.width*(0.5-parent.anchorX),parent.height*(0.5-parent.anchorY))
现在的很容易忘记写现在的这种写法 一旦父节点的锚点不在中心点,位置就不会居中.
居中现在用 nantas 上面说的方法就很好了,不需要程序操心。
如果你就是不想用 widget ,你应该一开始就应该让父节点的 anchor 为 0.5, 0.5,然后子节点保持坐标在 0, 0 就好了。这样最爽了,父节点不论如何动态缩放,子节点都还是能居中。
如果同时你还是希望父节点的 anchor 必须是别的点,那麻烦在父节点上面加一个爷爷节点,由爷爷节点充当父节点的 anchor,父节点保持 anchor 是 0.5, 0.5。
比如有一组卡牌,有规律排列, 原来通过获取坐标很容易得出是第几张, 现在这是不容易的, 如果不考虑父节点锚点就会出错
快过年了,不推荐写这么 hack 的代码…… 很容易被老板查出来,扣你年终奖的。
非要写的话,你把父节点的 anchor 设为 0,0 不就行了吗,毕竟锚点的变动一定是美术方面的需要,或者是策划为了布局方便设置的。如果是卡牌背景图这种常见的 UI 元素,美术是无所谓锚点在哪的,一般都是策划在编辑器里根据布局需要设置好的,不会有人手贱去乱改。
锚点除了运动外是常被忽略的, 如果后期不经意变动,那就会出问题
就算锚点有人需要改,我们也希望的是子物体跟着父物体的锚点动,否则才真的会出问题
关于以前游戏的重写
旧系统如果不愿意改代码,
方法1. 手工在父子节点的中间插入一个节点,节点使用 widget 组件固定在父节点左下角即可。
方法2. 修改父节点的 anchor 为 0,0,然后在父节点上面加一个爷爷节点,由爷爷节点充当父节点的 anchor
这个图看不懂,你的需求能解释下吗?
感谢你的热心反馈,让我们能做得更好。
我再总结一下锚点的作用。
锚点的作用无非两个,标识美术关键元素和方便策划布局。
- 标识美术关键点:
这种锚点是由美术在场景里设置的,就像我前面举例的,十字准心和箭头。
此时父节点旋转,子物体必须绕着父物体锚点动 (现在满足,原先满足)。
父节点锚点位置如果变化,子物体应该自动跟着移动 (现在满足,原先不满足)。
- 方便策划布局:
如果是卡牌背景图,按钮,图标这些 UI 元素,美术是无所谓锚点在哪的,一般都是策划在编辑器里根据布局需要设置好的。
我们现在鼓励的是策划使用 widget 来做定位,策划其实不再需要通过 anchor 来做布局了。
就算要用 anchor 布局,如果 anchor 需要变,一般是由于 UI 有了新的布局需求,本来就不是改一个 anchor 能解决的事情,更不会有策划手贱去改一个本来设得好好的 anchor。
就算改错了,策划也不可能不预览结果,有错误他自己会及时在编辑器下处理,不需要经过程序解决。
所以你帖子标题说的“位置系统对程序员来说极度不友好”应该是不成立的。
