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值。

 

 

posted @ 2012-08-16 00:21  AntWu  阅读(271)  评论(0编辑  收藏  举报