lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8855|回复: 7
打印 上一主题 下一主题

LSprite叠加不显示的问题

[复制链接]

31

主题

0

好友

215

积分

帐下督

Rank: 2

跳转到指定楼层
楼主
发表于 2014-7-30 17:05:45 |只看该作者 |倒序浏览
       

底层有个var mapLayer = new LSprite();
然后我在某个draw函数内执行如下操作后
var bgBuffer =new LSprite();
bgBuffer.graphics.drawRect(1, 省略不写);


mapLayer.addChild(bgBuffer);//奇怪的是屏幕上显示不出bgBuffer的内容,请问是怎么回事啊?一个LSprite内不能叠加很多LSprite嘛?


回复

使用道具 举报

31

主题

0

好友

215

积分

帐下督

Rank: 2

沙发
发表于 2014-7-30 17:33:21 |只看该作者
上面的问题,经过测试后,总结了一下是这个BUG
一个小小的例子重现BUG:

var bg1= null;
function onframe()
{
        if( bg1 == null )//生成红色的背景墙
        {
                bg1= new LSprite();
                bg1.graphics.drawRect(1, "#ff0000",
                        [0, 0, screen_width, screen_height],
                        true,"#ff0000");
        }
          //问题在这里,重复2次removeAllchid和addChild的话 就没办法显示红色的背景墙
        mapLayer.removeAllChild();
        mapLayer.addChild(bg1);

        mapLayer.removeAllChild();
        mapLayer.addChild(bg1);

}
回复

使用道具 举报

31

主题

0

好友

215

积分

帐下督

Rank: 2

板凳
发表于 2014-7-30 17:34:02 |只看该作者
ccalm 发表于 2014-7-30 17:33
上面的问题,经过测试后,总结了一下是这个BUG
一个小小的例子重现BUG:

mapLayer.removeAllChild();
mapLayer.addChild(bg1);

这2行代码只调用一次就没问题,2次就显示不了了
回复

使用道具 举报

31

主题

0

好友

215

积分

帐下督

Rank: 2

地板
发表于 2014-7-30 17:54:33 |只看该作者
貌似是 LGlobal.destroy ; 造成的,由于一remove就清空了资源,请问有什么办法可以解决这个问题?一个对象的生命周期如何让我们手动来控制?另外一个LSprite在加入A舞台的时候,如果已经在B舞台存在就会移除,那么一个对象如何在2个舞台共同显示?
回复

使用道具 举报

46

主题

3

好友

1866

积分

偏将军

Rank: 4

5#
发表于 2014-7-30 18:46:30 |只看该作者
建议你使用clone函数,这个函数可以直接把对象复制一遍,然后每次addChild对象的时候addChild复制出的对象就可以了。
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

6#
发表于 2014-7-30 18:47:02 |只看该作者
ccalm 发表于 2014-7-30 17:54
貌似是 LGlobal.destroy ; 造成的,由于一remove就清空了资源,请问有什么办法可以解决这个问题?一个对象 ...

对象一旦被移除的话,是将对象上所有的东西都彻底清空的
如果你要保留原有对象中的内容的话,你需要动态改变LGlobal.destroy的值
比如你现在的要求,最好是这样做
  1. LGlobal.destroy = false;
  2. mapLayer.removeAllChild();
  3. LGlobal.destroy = true;
复制代码
不回答与技术和引擎不相关的问题
回复

使用道具 举报

31

主题

0

好友

215

积分

帐下督

Rank: 2

7#
发表于 2014-7-30 19:21:32 |只看该作者
lufy 发表于 2014-7-30 18:47
对象一旦被移除的话,是将对象上所有的东西都彻底清空的
如果你要保留原有对象中的内容的话,你需要动态改 ...

这样做的话只保证了本次removeAllChild不会释放对象的资源对吧?
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

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

8#
发表于 2014-7-30 22:25:13 |只看该作者
ccalm 发表于 2014-7-30 19:21
这样做的话只保证了本次removeAllChild不会释放对象的资源对吧?

对,如果你要一致保持资源不释放的话,直接在开始的时候设置一下LGlobal.destroy = false;然后不用再重新设为true了。但是我不推荐这么做。
不回答与技术和引擎不相关的问题
回复

使用道具 举报

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

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

Archiver|lufy's legend

GMT+8, 2024-5-3 07:48 , Processed in 0.050276 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部