这应该算一个Bug

  • Creator 版本: 3.8.8

当父级A设置了透明度比如128后, 会影响子级B的透明度,但是此时子级B的color上仍然保持255,表现却变成了半透明,当子级B移出父级A后,这种透明度影响仍然在,但Color仍然是255,然后就乱套了,本质上这是个bug吧?

前面的叫透明度叠加。后面的具体怎么移的?如果真存在就是bug。可以自己写个shader修改透明度。

移出去,透明度影响不存在啊

这个是因为修改父节点的透明度,子节点也会同步修改的,我记得代码可以设置是否影响子节点的透明度,这个你就想象成设置缩放大小

image
首先两个Sprite节点之间要插入一个普通的节点

然后要延迟更换父级,要等颜色属性在节点以及子级生效

import { _decorator, Color, Component, Material, Node, Sorting, Sorting2D, Sprite, Vec4 } from 'cc';

const { ccclass, property, type, executeInEditMode } = _decorator;

@ccclass('SpriteAlphaTest')
export class SpriteAlphaTest extends Component {

    private sprite: Sprite
    private child: Node;
    private childSkin: Sprite;
    protected onLoad() {
        this.sprite = this.getComponent(Sprite);

        this.child = this.node.getChildByName("Child");
        this.childSkin = this.child.getChildByName("Skin").getComponent(Sprite);
    }

    protected start(): void {

        this.sprite.color = new Color(255, 255, 255, 128);

        this.scheduleOnce(() => {
            this.node.parent.addChild(this.child);

            console.log(this.childSkin.getComponent(Sprite).color);
        }, 2);


    }
}

我试过了,这个Bug藏的有点深

确实有这个问题