Flash里面的一些层叠问题
在我们热爱的Flash里面,有一些需要具体知道的问题,其中在这些问题里面,偶尔会遇到的问题是,不同displayContainer的互相嵌套。前段时间,我自己就遇到了一个这样的问题。
在Flash里面,不同的displayObject都是被addChild到Stage上才会显示出来的(被我们看到)。例如下面这个代码:
1 [Embed(source="../assets/head2.jpg")] 2 private var HeadClass : Class; 3 private var head : Bitmap; 4 private var headContainer : Sprite = new Sprite(); 5 private var headContainersParent : Sprite = new Sprite(); 6 7 public function Blog() 8 { 9 trace("Hello world"); 10 init(); 11 } 12 13 private function init() : void 14 { 15 stage.scaleMode = StageScaleMode.NO_SCALE; 16 head = new HeadClass(); 17 this.addChild(head); 18 headContainer.addChild(head); 19 headContainersParent.addChild(headContainer); 20 this.addChild(headContainersParent); 21 }
需要注意的是,任何的displayObject都是以最后addChild的对象为父对象,例如,我先把head addChild到main上面,但是后面我又把head addChild到headContainer上面,如果我不把headContainer addChild到main上面,head是不会显示出来的。
结果是这个样子:
如果想让这个头像绕中心旋转,有两个步骤:
1,设置head的x、y偏移: head.x = -head.width/2; head.y = -head.height/2;
2,设置headContainerParent的中心为 headContainerParent.x= head.width/2; headContainerParent.y = head.height/2;
1 private function rotate() : void 2 { 3 // 设置旋转中心 4 head.x = -head.width / 2; 5 head.y = -head.height / 2; 6 // 设置绕stage中心旋转 7 headContainersParent.x = stage.stageWidth / 2; 8 headContainersParent.y = stage.stageHeight / 2; 9 // 按帧旋转 10 headContainersParent.addEventListener(Event.ENTER_FRAME, rotateEnterFrame); 11 } 12 13 private function rotateEnterFrame(event : Event) : void 14 { 15 headContainersParent.rotation++; 16 }
到这里为止,一切都是十分简单,不过问题开始出现了,如果需要把这个head放大怎么办?十分简单:
headContainersParent.scaleX = 2;
headContainersParent.scaleY = 2;
如果不使用旋转,现在的情况是这样的:
一切看起来十分完美,但是如果在使用:
headContainersParent.scaleX = 2;
headContainersParent.scaleY = 2;
之前,headContainer的x,y!=0,0会怎么样?这里出现一个十分视觉上十分诡异的问题:图片的左上角并不在0,0点,但是却显示图片的xy=0,0;
Flash的显示XY和Unity3d的显示XY稍微有点不同,Flash要时刻记住DisplayObjectContainer的XY是不以显示的内容宽和高为准的,但是Unity3d确会每一次计算显示内容的宽和高重新计算XY值。