美文网首页
白鹭(egret)发布vivo小游戏出现文本显示问题(v1041

白鹭(egret)发布vivo小游戏出现文本显示问题(v1041

作者: PurySun | 来源:发表于2019-11-29 18:05 被阅读0次

    (vivo引擎1041以上版本,文本已不会出现问题)

    vivo工程中egret.vivogame.js,搜索WebGLRenderer.prototype.renderText,修改此函数。

    核心部分(里面的偏移数字可以根据实际效果调节,这里是0.9):

    if (lowerVersion){
        this.canvasRenderBuffer.context.$offsetX = canvasScaleX * (-x)*0.5 + canvasScaleX * canvasScaleX*0.5;
        this.canvasRenderBuffer.context.$offsetY = canvasScaleY * (-y)*0.5 + canvasScaleY * canvasScaleY*0.5;        
    }
    
    if (lowerVersion){
        textureWidth *= canvasScaleX*0.9;
        textureHeight *= canvasScaleY*0.9;
    }   
    

    对应完整函数:

    var lowerVersion = qg.getSystemInfoSync().platformVersionCode <= 1041;
    WebGLRenderer.prototype.renderText = function (node, buffer) {
    
    if (vivogame.textAtlasRenderEnable) {
        this.___renderText____(node, buffer);
        return;
    }
    var width = node.width - node.x;
    var height = node.height - node.y;
    if (width <= 0 || height <= 0 || !width || !height || node.drawData.length == 0) {
        return;
    }
    var canvasScaleX = egret.sys.DisplayList.$canvasScaleX;
    var canvasScaleY = egret.sys.DisplayList.$canvasScaleY;
    var maxTextureSize = buffer.context.$maxTextureSize;
    if (width * canvasScaleX > maxTextureSize) {
        canvasScaleX *= maxTextureSize / (width * canvasScaleX);
    }
    if (height * canvasScaleY > maxTextureSize) {
        canvasScaleY *= maxTextureSize / (height * canvasScaleY);
    }
    width *= canvasScaleX;
    height *= canvasScaleY;
    var x = node.x * canvasScaleX;
    var y = node.y * canvasScaleY;
    if (node.$canvasScaleX != canvasScaleX || node.$canvasScaleY != canvasScaleY) {
        node.$canvasScaleX = canvasScaleX;
        node.$canvasScaleY = canvasScaleY;
        node.dirtyRender = true;
    }
    if (this.wxiOS10) {
        if (!this.canvasRenderer) {
            this.canvasRenderer = new egret.CanvasRenderer();
        }
        if (node.dirtyRender) {
            this.canvasRenderBuffer = new vivogame.CanvasRenderBuffer(width, height);
        }
    }
    else 
    {
        if (!this.canvasRenderBuffer || !this.canvasRenderBuffer.context) {
            this.canvasRenderer = new egret.CanvasRenderer();
            this.canvasRenderBuffer = new vivogame.CanvasRenderBuffer(width, height);
        }
        else if (node.dirtyRender) {
            this.canvasRenderBuffer.resize(width, height);
        }
    }
    if (!this.canvasRenderBuffer.context) {
        return;
    }
    if (canvasScaleX != 1 || canvasScaleY != 1) {
        this.canvasRenderBuffer.context.setTransform(canvasScaleX, 0, 0, canvasScaleY, 0, 0);
    }
    if (x || y) {
        if (node.dirtyRender) {
            this.canvasRenderBuffer.context.setTransform(canvasScaleX, 0, 0, canvasScaleY, -x, -y);
    
            if (lowerVersion){
                this.canvasRenderBuffer.context.$offsetX = canvasScaleX * (-x)*0.5 + canvasScaleX * canvasScaleX*0.5;
                this.canvasRenderBuffer.context.$offsetY = canvasScaleY * (-y)*0.5 + canvasScaleY * canvasScaleY*0.5;        
            }
    
        }
        buffer.transform(1, 0, 0, 1, x / canvasScaleX, y / canvasScaleY);
    }
    else if (canvasScaleX != 1 || canvasScaleY != 1) {
        this.canvasRenderBuffer.context.setTransform(canvasScaleX, 0, 0, canvasScaleY, 0, 0);
    }
    if (node.dirtyRender) {
        var surface = this.canvasRenderBuffer.surface;
        this.canvasRenderer.renderText(node, this.canvasRenderBuffer.context);
        if (this.wxiOS10) {
            surface["isCanvas"] = true;
            node.$texture = surface;
        }
        else {
            var texture = node.$texture;
            if (!texture) {
                texture = buffer.context.createTexture(surface);
                node.$texture = texture;
            }
            else {
                buffer.context.updateTexture(texture, surface);
            }
        }
        node.$textureWidth = surface.width;
        node.$textureHeight = surface.height;
    }
    
    var textureWidth = node.$textureWidth;
    var textureHeight = node.$textureHeight;
    
    if (lowerVersion){
        textureWidth *= canvasScaleX*0.9;
        textureHeight *= canvasScaleY*0.9;
    }
    
    buffer.context.drawTexture(node.$texture, 0, 0, textureWidth, textureHeight, 0, 0, textureWidth / canvasScaleX, textureHeight / canvasScaleY, textureWidth, textureHeight);
    if (x || y) {
        if (node.dirtyRender) {
            this.canvasRenderBuffer.context.setTransform(canvasScaleX, 0, 0, canvasScaleY, 0, 0);
        }
        buffer.transform(1, 0, 0, 1, -x / canvasScaleX, -y / canvasScaleY);
    }
    node.dirtyRender = false;
    };
    

    相关文章

      网友评论

          本文标题:白鹭(egret)发布vivo小游戏出现文本显示问题(v1041

          本文链接:https://www.haomeiwen.com/subject/qcxeictx.html