Egret 2D(3)--变换操作和添加删除对象

锚点操作

每个显示对象都包含一个锚点,锚点默认位于显示对象的左上角。

当设置一个显示对象的坐标位置时,会以锚点为参照改变显示对象的绘图位置。同时,锚点相对于显示对象的位置也是可以改变的。

修改锚点

shp.anchorOffsetX = 50;
shp.anchorOffsetY = 50;

本地坐标和舞台坐标

x 和 y 属性始终是指显示对象相对于其父显示对象坐标轴的 (0,0) 坐标的位置。因此,对于包含在 DisplayObjectContainer 实例内的 Shape 实例(如圆),如果将 Shape 对象的 x 和 y 属性设置为 0,会将圆放在 DisplayObjectContainer 的左上角,但该位置不一定是舞台的左上角。若要确定对象相对于全局舞台坐标的位置,可以使用任何显示对象的 globalToLocal() 方法将坐标从全局(相对于舞台)坐标转换为本地(相对于显示对象容器)坐标。

//把舞台左上角的坐标(0,0)转换为 container 内部的坐标
var targetPoint: egret.Point = container.globalToLocal(0,0);

//重新定位圆,可以看到圆形移到了屏幕的左上角
circle.x = targetPoint.x;
circle.y = targetPoint.y;

位置和平移

container.x = 17;
container.y = 212;

属性的操作

对显示对象操作属性,具体一些属性在“基本概念”文章

显示对象.属性=xxx;

//shp.width=100;宽度
//shp.alpha=1;透明度

添加对象

添加对象到显示列表:

在Egret中建立显示对象和渲染显示对象是两个过程。建立显示对象后,对象会处于内存中,但不会参与渲染过程,只有把显示对象放到显示列表后,显示对象才会参与渲染过程。如果想将某个显示对象从渲染过程中删除,只需要将其移除显示列表即可。

this.addChild( spr );

添加对象不只是添加到舞台类中,还可以添加到容器中:

sprcon1.addChild( spr );

注意:

同一个显示对象无论被代码加入显示列表多少次,在屏幕上只绘制一次。

如果一个显示对象A被添加到了B这个容器中,然后A又被添加到了C容器中。那么在第二次执行 C.addChild(A) 的时候,A自动的从B容器中删除,然后添加到C容器中。

删除显示对象

//容器对象.removeChild( 显示对象 );
this.removeChild( spr );

注意:

扫描二维码关注公众号,回复: 20371 查看本文章

执行删除操作时,“显示对象”必须拥有父级。换句话说,被删除的显示对象必须存在于容器对象当中。

如果当前删除的显示对象不在容器对象之中,JavaScript控制台会报错:

Uncaught Error: [Fatal]child未被addChild到该parent:

避免这种问题的处理方法是:每次removeChild之前,对即将要被删除的显示对象做一次判断,判断它是否拥有父级。判断的代码如下:

if( spr.parent ) {
    spr.parent.removeChild( spr );
}

猜你喜欢

转载自my.oschina.net/u/3112095/blog/1785455
今日推荐