lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1482|回复: 4

LUFY,关于遍历DRAW的问题

[复制链接]

64

主题

2

好友

1340

积分

偏将军

Rank: 4

发表于 2019-1-2 17:16:46 |显示全部楼层
for (var i = 1; i <= 32; i+=2) {
var bitmapData3=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);
var bitmapData5=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);
bitmapData3.draw(hideSprite);
bitmapData5.draw(faceSprite);
}
如果遍历几十次后,微信浏览器会崩溃,如何解决,有没有其它的方法绘制图像。
回复

使用道具 举报

36

主题

7

好友

8910

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2019-1-4 09:51:12 |显示全部楼层
你想要实现什么效果呢,每次都new新的LBitmapData吗?不断的增加画面上的对象的数量,肯定会变慢啊,
draw到同一个LBitmapData不行吗?
如果无法draw到同一个LBitmapData上,麻烦具体说明一下你要的效果,我才能提供具体的优化方法
不回答与技术和引擎不相关的问题
回复

使用道具 举报

64

主题

2

好友

1340

积分

偏将军

Rank: 4

发表于 2019-1-4 17:54:32 |显示全部楼层
lufy 发表于 2019-1-4 09:51
你想要实现什么效果呢,每次都new新的LBitmapData吗?不断的增加画面上的对象的数量,肯定会变慢啊,
draw ...

有32个人物动作
for (var i = 1; i <=32; i+=2) {

                var bitmapData=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);
                 var bitmapData1=new LBitmapData(imglist["playerm" + (i + 0)]);人物遮罩
                  var bitmapData2=new LBitmapData(imglist["player" + (i + 0)]);人物
                   var bitmapData4=new LBitmapData(imglist["players" + (i + 0)]);人物的阴影面

                 var bitmapData3=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);
                  var bitmapData5=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);

                   hideMask.removeAllChild();
                   var displaybmp=new LBitmap(bitmapData1);
                    hideMask.addChild(displaybmp);
                 bitmapData3.image.width = bitmapData3.image.width;
                bitmapData3.draw(hideSprite);//绘制混合模式

               
                 bitmapData5.image.width = bitmapData5.image.width;
                 hideSprite.alpha=0.8;
                bitmapData5.draw(hideSprite);//绘制混 合混 式+透明度

                 bitmapData.copyPixels(bitmapData2, new LRectangle(0, 0, 600*1, 1070*1), new LPoint(0,0));         //复制人物
                bitmapData.copyPixels(bitmapData3, new LRectangle(0, 0, 600*1, 1070*1), new LPoint(0,0));        //复制混合模式
                 bitmapData.copyPixels(bitmapData4, new LRectangle(0, 0, 600*1, 1070*1), new LPoint(0,0));   //复制人物阴影
                 bitmapData.copyPixels(bitmapData5, new LRectangle(0, 0, 600*1, 1070*1), new LPoint(0,0));  //复制透明度
        datas.push(bitmapData);
        listChild.push({dataIndex : w-1, x : 0, y : 0, width : 600*1, height : 1070*1, sx : 0, sy : 0});
       
    }


player = new LAnimationTimeline(datas, [listChild]);
回复

使用道具 举报

36

主题

7

好友

8910

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

发表于 2019-1-5 08:45:24 |显示全部楼层
zyflzxy 发表于 2019-1-4 17:54
有32个人物动作
for (var i = 1; i

我就理解为你需要一次性处理很多东西吧,任何开发如果一次性处理太多东西,都会发生类似的问题吧
如果这些处理是不可避免的话,你可以将这些处理拆解来处理
最简单的是利用ENTER_FRAME事件,
比如你上面的处理,你可以每贞处理一个循环,比如

  1. var i = 1;
  2. function onframe(event){
  3.     if(i > 32){
  4.         player = new LAnimationTimeline(datas, [listChild]);
  5.         //完成,然后注销ENTER_FRAME
  6.         return;
  7.     }
  8.     var bitmapData=new LBitmapData(null,null, null, 600*1, 1070*1,LBitmapData.DATA_CANVAS);
  9.     ......
  10.     listChild.push({dataIndex : w-1, x : 0, y : 0, width : 600*1, height : 1070*1, sx : 0, sy : 0});
  11.     i+=2;
  12. }
复制代码
其实就是把一次性的大量处理,每隔一小段时间处理一部分而已,因为这样处理相当于异步处理,肯定需要比一次性处理需要更多的时间,所以加个loading会比较自然


不回答与技术和引擎不相关的问题
回复

使用道具 举报

64

主题

2

好友

1340

积分

偏将军

Rank: 4

发表于 2019-1-5 08:58:36 |显示全部楼层
lufy 发表于 2019-1-5 08:45
我就理解为你需要一次性处理很多东西吧,任何开发如果一次性处理太多东西,都会发生类似的问题吧
如果这些 ...

好的,我试一下,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2020-8-12 20:54 , Processed in 0.068088 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部