不用自定义引擎,也可以修复 3.8.4, UIOpacity的问题

创建一个mjs 引入即可. 代码如下:

import * as cc from 'cc';
//3.8.4 修复透明度得问题
if (cc.VERSION.indexOf("3.8.4") > -1){//合并 3.8.5 pr

    cc.UIOpacity.prototype.setEntityLocalOpacityDirtyRecursively = function(dirty){

        if (JSB) {

            // const render = this.node._uiProps.uiComp as UIRenderer;

            // if (render) {

            //     render.setEntityOpacity(this.node._uiProps.localOpacity);

            // }

            // UIRenderer.setEntityColorDirtyRecursively(this.node, dirty);

            //UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, dirty, 1, false);

            cc.UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, dirty, this._parentOpacity, false);

        }

    }

    cc.UIOpacity.prototype._parentChanged = function(){

        if (!JSB) {

            return;

        }

        const parent = this.node.getParent();

        let opacity = 1;

        if (parent) {

            this._parentOpacity = this._getParentOpacity(parent);

            opacity = this._parentOpacity;

        } else {

            this._parentOpacityResetFlag = true;

        }

        cc.UIOpacity.setEntityLocalOpacityDirtyRecursively(this.node, true, opacity, false);

    }

    cc.UIOpacity.prototype.onEnable = function(){

        this.node.on(cc.NodeEventType.PARENT_CHANGED, this._parentChanged, this);

        this.node._uiProps.localOpacity = this._parentOpacity * this._opacity / 255;

        if (this._parentOpacityResetFlag || this._parentOpacityResetFlag == null) {//默认值应该是true,

            this._parentOpacityResetFlag = false;

            this._parentChanged();

        }

        else{

            this._setEntityLocalOpacityRecursively(this.node._uiProps.localOpacity);

        }

    }

}

`

2赞

学 到 了