Egret社区
6银子
本帖最后由 edwin01 于 2019-7-9 19:52 编辑

egret.Shape 能否实现先把复杂的 动态划线功能(动态走势线)在内存中不停画, 然后定时把 shape 刷入到场景中提升性能
32323.gif
TIM截图20190709141051.png 每一块,都有4个shape  100多个shap,卡顿很严重

第一步,申请个全局的数组
[mw_shl_code=javascript,true]
private Allshap:Array<egret.Shape> = new Array<egret.Shape>();
[/mw_shl_code]


第二步,创建 egret.Shape ,先不加入到场景中

[mw_shl_code=javascript,true]
private initDraw(datas,g_idx,speed,g_off_h,g_off_w){
    let shape:egret.Shape = new egret.Shape();

    //this.addChild(shape);// 先不加入到场景中, 先让 shape在内存中动态线
   this.Allshap[g_idx] = shape

   new Draw(shape,datas,g_idx,speed,g_off_h,g_off_w).draw();
}
[/mw_shl_code]



第三步,定时任务,把每个 shape 整体刷入到场景中
[mw_shl_code=javascript,true]
private onAddToStage(event:egret.Event) {
     ...
       setInterval(this.mergeShape,100,this);// 每100毫秒执行一次
     ...
}

private mergeShape(that){

        for(let i =0;i<that.Allshap.length;i++){
            console.log(i)
            let shape = that.Allshap;

            that.addChild(shape); // 1. 先刷入到场景中
            that.removeChild(shape);// 2. 剔除后,shape还在内存中动态画图
        }

    }


[/mw_shl_code]



完整代码:
[mw_shl_code=applescript,true]
class Main extends egret.DisplayObjectContainer {
   
   
    private ALLDg:Array<Dg> = new Array<Dg>();


    constructor() {
        super();
        
        this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
  
    }


    private initDraw(datas,g_idx,speed,g_off_h,g_off_w){
        let dgshap = new egret.Shape()
        dgshap.cacheAsBitmap = true
        this.addChild(dgshap)
        let dg = new Dg(dgshap,datas,g_idx,speed,g_off_h,g_off_w)
        this.ALLDg.push(dg)
      
    }


    private draw(g_off_h,g_off_w){


        this.initDraw(datas,1,4,g_off_h,g_off_w)

        this.initDraw(datas,2,10,g_off_h,g_off_w);


        this.initDraw(datas,3,20,g_off_h,g_off_w);


        this.initDraw(datas,4,2,g_off_h,g_off_w);


    }
    private onAddToStage(event:egret.Event) {


      for(let i=0;i<10;i++){
        for (let j =0;j<4;j++){
             this.draw(i,j)
         }
       }
         
      
       /// 产生动画
       this.stage.addEventListener( egret.Event.ENTER_FRAME, ( evt:egret.Event )=>{

         let tmpshap = this.ALLDg[0]._shape

          for(let i =0;i<this.ALLDg.length;i++){
              this.ALLDg.draw()
          }

        }, this)

    }

}[/mw_shl_code]
TIM截图20190709194435.png

分享到 :
0 人收藏

37 个回复

倒序浏览
edwin01  登堂入室 | 2019-7-8 11:54:35
第三步  要怎么实现呢        canvas 有功能 drawImage 这个函数, 但是在 egret.Shape 没有找到
edwin01  登堂入室 | 2019-7-8 11:55:37
求助各位大佬
edwin01  登堂入室 | 2019-7-8 11:57:16
整个大屏 要画 80条这样的动态线
edwin01  登堂入室 | 2019-7-8 11:59:58
来来来,讨论下
edwin01  登堂入室 | 2019-7-8 12:01:01
版本 5.2.22
Hjx  圆转纯熟 | 2019-7-8 12:11:50
白鹭有个截图功能egret.RenderTexture  可以吧你绘制的东西生成一个位图 然后添加到场景
Hjx  圆转纯熟 | 2019-7-8 12:12:56
edwin01  登堂入室 | 2019-7-8 13:30:54
Hjx 发表于 2019-7-8 12:12
http://developer.egret.com/cn/github/egret-docs/Engine2D/bitmapTexture/screenshots/index.html

嗯  我去试试
nofastfat  圆转纯熟 | 2019-7-8 13:51:11

shape直接显示即可,renderTexture频繁调用不行,很卡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

edwin01

登堂入室

积分: 13 帖子: 23 精华: 0

楼主热帖

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部