JSFL中的元素定位问题

通常情况下,一个Symbol如下图,注册点在左上角,变形点在正中。
http://kevincao.com/wp-content/uploads/200507/04_115435_jsfl1.png
而有些时候情况不是这样,也许注册点在元素外部的某处,变形点也不在正中的位置。
http://kevincao.com/wp-content/uploads/200507/04_115457_jsfl2.png
大家知道,属性面板里面关于位置与尺寸信息是不会相对于注册点和变形点改变的。而在JSFL中没有直接对应属性面板中的这几个值的属性,实在令人费解。使用以下的代码段测试一下JSFL中与元素定位相关的几个属性。

 
var dom = fl.getDocumentDOM();
var el = dom.selection[0]; // 得到场景上被选择的第一个元素。
if (el) {
	fl.trace("el.left = "+el.left);
	fl.trace("el.top = "+el.top);
	fl.trace("el.width = "+el.width);
	fl.trace("el.height = "+el.height);
	fl.trace("el.matrix.tx = "+el.matrix.tx);
	fl.trace("el.matrix.ty = "+el.matrix.ty);
	var tp = dom.getTransformationPoint();
	fl.trace("tp.x = "+tp.x);
	fl.trace("tp.y = "+tp.y);
}

得出这几个属性表示的位置关系如下图:可见变形点是包含在元素高度和宽度的计算当中的。
http://kevincao.com/wp-content/uploads/200507/04_115502_jsfl3.png
变形点坐标是以元件的注册点为原点的。如果不是元件,而是打散的图形或者是组,则默认的注册点为场景的原点。
http://kevincao.com/wp-content/uploads/200507/04_115507_jsfl4.png
由于没有与属性面板上的值的直接对应关系,看似简单的位置或尺寸取整问题变得复杂起来。我的[KC] Pixelate Position用了生成临时Movie Clip的办法来解决这个问题。因为只有把当前选择的物体程序地转化成一个新Symbol,才可确保注册点在物体的左上角。
[KC] Center TransPoint的算法比较巧一些。因为Flash在执行了群组后,会自动地把变形点居中到元素。只要解决原点不同的坐标变换就可以了。

Comments :

Author (Required)
Email (Required, not published)
URL

Related Posts :

Close
E-mail It
Socialized through Gregarious 42