HTML5游戏引擎(6)-添加删除显示对象-添加显示对象到显示列表-addChild&删除显示对象-removeChild添加删除显示对象
Egret中创建显示对象和渲染显示对象是两个过程。 显示对象创建后,该对象会在内存中,但不会参与渲染过程。 只有将显示对象放入显示列表后,显示对象才会参与渲染过程。 如果要从渲染过程中移除一个显示对象,只需将其从显示列表中移除即可。
添加显示对象到显示列表
创建显示对象后数据报告,您可以将其添加到显示列表中。 首先,绘制一个精灵,它是一个宽高为100的绿色正方形。
var spr:egret.Sprite = new egret.Sprite();
spr.graphics.beginFill( 0x00ff00 );
spr.graphics.drawRect(0, 0, 100, 100);
spr.graphics.endFill();
上面的代码是创建显示对象和测试程序的过程,但是在舞台上什么也看不到。 将spr添加到显示列表中,代码如下:
this.addChild( spr );
添加这段代码后,再次编译运行程序音乐音效,浏览器会看到如图所示的效果:
代码中的addChild()方法将spr添加到显示列表中。 前面说过,显示列表是一个树形结构游戏引擎列表游戏引擎列表,spr的上层是这个,就是文档类。 文档类是舞台舞台的第一个子对象。
这是当前示例的层次结构示意图:
删除显示对象
使用removeChild()方法删除显示对象,代码如下:
this.removeChild( spr );
执行删除操作类似于添加显示对象,将删除的显示对象作为参数传递给 removeChild 方法。 例子中spr是要删除的展示对象,this是spr的parent。
注意
显示对象独立于显示列表
显示对象独立于显示列表,尽管显示对象经常在运行时添加到显示列表或从显示列表中删除。 简单解释:在创建展示对象Sprite时,该对象有自己的坐标属性、旋转角度属性等,这些属性都是展示对象独立拥有的。 一旦将显示对象添加到显示列表中,Egret 将根据显示对象的状态进行显示。
这些状态在用户从显示列表中删除显示对象后仍然存在。 从显示列表中删除显示对象时,该对象不会在内存中销毁。 只是不要让显示对象参与渲染。
通过一段代码观察容器中显示对象的运行和状态变化:
//创建了一个类型为Sprite的显示对象
var spr:egret.Sprite = new egret.Sprite();
spr.graphics.beginFill( 0x00ff00 );
spr.graphics.drawRect(0, 0, 100, 100);
spr.graphics.endFill();
//该对象存在,被添加到显示列表中,在画面中显示
this.addChild( spr );
//该对象存在,但已被移除显示列表,画面上不显示
this.removeChild( spr );
//该对象存在,驻于内存中