1、设置消失点
在3D中,消失点是所有物体远离时的聚集点。
在 Flash 10 里,每个显示元素可以有一个 perspectiveProjection 去指定控制怎么去渲染 3D。它指定的是 transform 的 perspectiveProjection 属性。所以,假如有一个名叫 s的 sprite,你可以这样去访问:
s.transform.perspectiveProjection
PerspectiveProjection 类有一个 projectionCenter属性是 Point 类的实例。这就是通常所说的消失点。因此,去设置显示元素的中心就可以像下面这样:
s.transform.perspectiveProjection.projectionCenter=new Point(stage.stageWidth / 2,
stage.stageHeight / 2);
这样只能设置一个 object 的消失点。当然这样就可以为这个元件的所有子元素设置消失点。
如果你想为影片中的所有元素设置消失点,可以在 root 上设置,像这样:
root.transform.perspectiveProjection.projectionCenter=new Point(stage.stageWidth / 2, stage.stageHeight / 2);
2、景深排序
在同一个容器中任何用 addChild 方法添加到显示列表中的对象会显示在以前的对象的前面。唯一能够改变这种情况的途径是一些操作显示列表的方法,比如addChild,addChildAt,swapChildren,removeChild 等等。因为显示容器里没有排序方法,所以所有的景深排序工作都需要手动完成。
3、3D 容器
显示对象的容器会在他们被改变的时候改变他们的子对象。换句话说,当你往一个
sprite
里添加一些显示对象并且移动它的容器的时候,它并不是简单地把窗口展平然后作为一个独立的对
象在 3D
空间里移动。它实际上改变每个子对象以使它们看起来是在 3D 空间里独立运动。
1 package 2 { 3 import flash.display.Sprite; 4 import flash.display.StageAlign; 5 import flash.display.StageScaleMode; 6 import flash.events.Event; 7 import flash.text.TextField; 8 import flash.text.TextFormat; 9 10 public class Container3D extends Sprite 11 { 12 private var _sprite:Sprite; 13 private var _n:Number = 0; 14 15 public function Container3D() 16 { 17 stage.align = StageAlign.TOP_LEFT; 18 stage.scaleMode = StageScaleMode.NO_SCALE; 19 20 _sprite = new Sprite(); 21 _sprite.y = stage.stageHeight / 2; 22 23 for( var i:int = 0; i < 100; i++ ) 24 { 25 var tf:TextField = new TextField(); 26 tf.defaultTextFormat = new TextFormat( "Arial", 40 ); 27 tf.text = String.fromCharCode( 65 + Math.floor( Math.random()* 25 ) ); 28 tf.selectable = false; 29 30 tf.x = Math.random() * 300 -150; 31 tf.y = Math.random() * 300 -150; 32 tf.z = Math.random() * 1000; 33 34 _sprite.addChild( tf ); 35 } 36 37 addChild( _sprite ); 38 addEventListener( Event.ENTER_FRAME, onEnterFrame ); 39 } 40 41 protected function onEnterFrame(event:Event):void 42 { 43 _sprite.x = stage.stageWidth / 2 + Math.cos(_n) * 200; 44 _n += .05; 45 } 46 } 47 }