位置系统对程序员来说极度不友好

原来写一个需要居中的节点 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。
就算改错了,策划也不可能不预览结果,有错误他自己会及时在编辑器下处理,不需要经过程序解决。

所以你帖子标题说的“位置系统对程序员来说极度不友好”应该是不成立的。

现在的流程确实非常好,组件化了,每个节点自已控制自己,不用再去用庞杂的程序去挨个控制了。 如果因为编辑器不好实现而改变的坐标系统是可以接受的。因为UI是可见的,所以怎么设置坐标都可以吧,只要编辑器里的和表现出来的一样就可以了,好像并不需要改坐标系统。

现在的坐标有这种感觉了 地球自转的时候人能正常的在地球上, 围太阳公转的时候人就要飞到太空去了

那张图意思是 大图和小图组成了一个合成图形,当围绕中心点旋转的时候正常,当不围绕中心点旋转的时候 原来的图形被破坏了

幸好楼上这位没去用unity,不然unity这成了吐槽的对象了

小白评论一下,这种锚点在中间,是很合理的设计的。
对于楼主说的,cocos也提供了api来转换到以左下角为基准的坐标。
可以看看convertToWorldSpaceAR,convertToWorldSpace,convertToNodeSpace,convertToNodeSpaceAR这几个api。理解了之后,用起来就不要太爽了。

幸好楼上这位说了不算。

幸好楼上这位不是开发引擎的老板

真的, 非常不友好, 那种需要大量位置计算的小游戏, 做起来让人发疯, 消除类的定位位置的, cocos 的程序员自己都不做点小游戏试试吗? 你们这么顶就算了, 还把canvas的锚点, 位置锁死了, 这是为什么? 不锁死, 是不是就一堆bug? 说自己加一个空节点的, 自己加了各平行的节点后, 不挂canvas下, 不显示吗? 还是你们有什么好方法, 请不吝赐教.

我刚做了一个消消乐游戏···········
没觉得有什么···········

我从creator 转到 cocos 。十分不习惯了……

我用了五六年的C++和lua,开始不习惯,但后来就习惯了~

photoshop的默认锚点不就是0.5么(旋转的时候是以0.5位置为轴进行旋转的),我看美术们也没有吐槽过。

……Canvas 存在的作用就是帮助定位到屏幕中心,不锁死的话很容易误操作。真的不想要这个定位,就不要放到 Canvas 里面,放外面随便你设置。放外面配合 Widget 来布局简直不要太简单。

本来就不是非得挂在 Canvas 下…… 只是对大多数游戏来说,居中适配屏幕比较常见。你先多看点文档,多看点案例吧,别急着下结论。