Flash 3D 基础

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 空间里独立运动。

 

Flash 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 }
Container3D

 

 

 

Flash 3D 基础

上一篇:正则表达式


下一篇:带缓冲区的字节流