【4858美高梅】canvas完毕刮刮乐,混合和过于绘制

By admin in 4858美高梅 on 2019年4月23日

【4858美高梅】canvas完毕刮刮乐,混合和过于绘制。 

 

GPU每壹帧能够绘制的像素有二个最大范围(正是所谓的fill
rate),那一个境况下能够轻巧地绘制整个显示器的有着像素。然而倘使由于重叠图层的关系须要不停地重绘同一区域来讲,掉帧就可能产生了。

 

错落和过火绘制

在第一二章有关联,GPU每1帧能够绘制的像素有二个最大范围(正是所谓的fill
rate),那个状态下得以自便地绘制整个显示屏的装有像素。然则要是是因为重叠图层的涉嫌必要不停地重绘同1区域来讲,掉帧就大概产生了。

GPU会放任绘制那多少个完全被其余图层遮挡的像素,但是要总计出叁个图层是或不是被遮挡也是分外复杂并且会开支管理器财富。一样,合并差异图层的透明重叠像素(即混合)消耗的能源也是一对壹客观的。所感觉了加速管理进度,不到必须随时不要采取透明图层。任何动静下,你应有如此做:

  • 给视图的backgroundColor属性设置三个稳固的,不透明的水彩
  • 设置opaque属性为YES

那样做缩减了交集表现(因为编写翻译器知道在图层之后的事物都不会对终极的像素颜色产生震慑)并且总结获得了加速,防止了过分绘制行为因为Core
Animation能够放任全数被全然遮盖住的图层,而不用各类像素都去总括二回。

要是用到了图像,尽量幸免透明除非尤其供给。假设图像要来得在四个一定的背景颜色或是固定的背景图以前,你没须求相对前景移动,你只必要预填充背景图片就可以幸免运维时混色了。

假定是文件的话,三个反革命背景的UILabel(大概其余颜料)会比透明背景要越来越高速。

最后,明智地选拔shouldRasterize质量,能够将三个固定的图层种类折叠成单张图纸,那样就不需求每1帧重新合成了,也就不会有因为子图层之间的和弄和矫枉过正绘制的性训斥题了。

 

4858美高梅 1

4858美高梅 2

GPU会放弃绘制那些完全被其他图层遮挡的像素,但是要计算出一个图层是否被遮挡也是相当复杂并且会消耗处理器资源。同样,合并不同图层的透明重叠像素(即混合)消耗的资源也是相当客观的。所以为了加速处理进程,不到必须时刻不要使用透明图层。任何情况下,你应该这样做:

4858美高梅 ,canvas完成刮刮乐主假如要注意多个地方:第一个是将绘制的图形设置成背景图片(用到toDataUCRUISERL属性),那样在擦覆盖层的时候才不会丢掉绘制的图画,

canvas落成刮刮乐首倘诺要留意多少个地点:第一个是将绘制的图片设置成背景图片(用到toDataULX570L属性),那样在擦覆盖层的时候才不会丢掉绘制的图腾,

  • 给视图的backgroundColor属性设置二个永世的,不透明的水彩

  • 设置opaque属性为YES

    诸如此类做缩减了混合表现(因为编写翻译器知道在图层之后的东西都不会对终极的像素颜色产生影响)并且总计得到了加速,幸免了过度绘制行为因为Core
    Animation能够遗弃所有被统统遮盖住的图层,而不用每一种像素都去总计1回。

    借使用到了图像,尽量制止透明除非极度须要。如若图像要浮以后多个固定的背景颜色或是固定的背景图从前,你没须要相对前景移动,你只供给预填充背景图片就能够防止运营时混色了。

    假如是文件的话,八个反革命背景的UILabel(大概此外颜色)会比透明背景要更迅捷。
    末段,明智地使用shouldRasterize属性,能够将三个牢固的图层种类折叠成单张图纸,那样就不供给每一帧重新合成了,也就不会有因为子图层之间的交集和矫枉过正绘制的品质难点了。

其次个是设置在绘制插图的时候,设置透明透明(用到globalCompositeOperation属性)

其次个是设置在绘制插图的时候,设置透明透明(用到globalCompositeOperation属性)

代码如下:

代码如下:

<script>
    var arr=[
        {name:"iphone7 磨砂黑",color:"rgba(255,255,0,1)"},
        {name:"iphone7 磨砂黑",color:"rgba(0,255,0,.9)"},
        {name:"iphone7 磨砂黑",color:"rgba(10,255,255,1)"},
        {name:"iphone7 磨砂黑",color:"rgba(10,255,100,1)"}
    ]
    var r=Math.random();
    var rIndex= Math.floor(r*arr.length);
    var rPrice=arr[rIndex];
    var cv=document.getElementsByTagName('canvas')[0];
    var isDown=false;
    cv.height=400;
    cv.width=600;
    var ctx=cv.getContext("2d");
    function toAngle(radian){
        return radian/Math.PI*180;
    }
    function toRadian(angle){
        return angle/180*Math.PI;
    }
    ctx.textAlign="center";
    ctx.textBaseline="middle";
    ctx.font="30px consolas";
    ctx.fillStyle=rPrice.color;
    ctx.fillText(rPrice.name,cv.width/2,cv.height/2);

    var dataURL=cv.toDataURL("image/jpg",1);
    cv.style.background="url("+dataURL+")";

    //覆盖层
    ctx.beginPath();
    ctx.fillStyle="#eee";
    ctx.fillRect(0,0,cv.width,cv.height);

    cv.addEventListener("mousedown",function(){
        isDown=true;
    })
    cv.addEventListener("mouseup",function(){
        isDown=false;
        ctx.globalCompositeOperation="source-out"
    })
    cv.addEventListener("mousemove",function(e){
        if (isDown){
            ctx.globalCompositeOperation="destination-out";
            ctx.beginPath();
            var posObj=cv.getBoundingClientRect();

            var left=posObj.left;
            var top=posObj.top;

            var x= e.clientX-left;
            var y= e.clientY-top;

            ctx.arc(x,y,50,0,Math.PI*2);
            ctx.fill();
        }
    })
</script>
<script>
    var arr=[
        {name:"iphone7 磨砂黑",color:"rgba(255,255,0,1)"},
        {name:"iphone7 磨砂黑",color:"rgba(0,255,0,.9)"},
        {name:"iphone7 磨砂黑",color:"rgba(10,255,255,1)"},
        {name:"iphone7 磨砂黑",color:"rgba(10,255,100,1)"}
    ]
    var r=Math.random();
    var rIndex= Math.floor(r*arr.length);
    var rPrice=arr[rIndex];
    var cv=document.getElementsByTagName('canvas')[0];
    var isDown=false;
    cv.height=400;
    cv.width=600;
    var ctx=cv.getContext("2d");
    function toAngle(radian){
        return radian/Math.PI*180;
    }
    function toRadian(angle){
        return angle/180*Math.PI;
    }
    ctx.textAlign="center";
    ctx.textBaseline="middle";
    ctx.font="30px consolas";
    ctx.fillStyle=rPrice.color;
    ctx.fillText(rPrice.name,cv.width/2,cv.height/2);

    var dataURL=cv.toDataURL("image/jpg",1);
    cv.style.background="url("+dataURL+")";

    //覆盖层
    ctx.beginPath();
    ctx.fillStyle="#eee";
    ctx.fillRect(0,0,cv.width,cv.height);

    cv.addEventListener("mousedown",function(){
        isDown=true;
    })
    cv.addEventListener("mouseup",function(){
        isDown=false;
        ctx.globalCompositeOperation="source-out"
    })
    cv.addEventListener("mousemove",function(e){
        if (isDown){
            ctx.globalCompositeOperation="destination-out";
            ctx.beginPath();
            var posObj=cv.getBoundingClientRect();

            var left=posObj.left;
            var top=posObj.top;

            var x= e.clientX-left;
            var y= e.clientY-top;

            ctx.arc(x,y,50,0,Math.PI*2);
            ctx.fill();
        }
    })
</script>

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有