未來時間 2008-5-16 21:50
AS3 技巧和提示
[font=新細明體]在 AS3 中你可以通過 Stage 類動態改變影片的幀速[/font]
d:QK.f&c'P3x
[font=新細明體]所有的 DisplayObject 都有一個 stage 內容, 通過他可以存取目前 DisplayObject 所在案例的 Stage.[/font]} JcFVJY
[font=新細明體]修改 stage 的 frameRate 內容就可以改變幀速, 他的值可以是 0.01 ~ 1000[/font]
|q8K'aU+n[~J
[font=新細明體]package {[/font]
5K&IMx5U+BW*YK(V
[font=新細明體]import flash.display.Sprite; public class MySprite extends Sprite[/font]
3C+]w?X6hET
[font=新細明體]{[/font]7nn,Z-T(qY0f4`'pZm
[font=新細明體]public function MySprite () {[/font]W B)g+Ku;R7n)]3z
[font=新細明體]// 修改影片幀速到 12 幀 / 秒[/font]6Pb,M5{0yD4X"eX
[font=新細明體]stage.frameRate = 12;[/font]\'B
Bk*e
f^
[font=新細明體]}[/font]
s-e@A
b
a4[;[n
[font=新細明體]}[/font]
RFUUZ/Wd}9b|
[font=新細明體]}[/font]Dr5\*iv\ke'b
[font=新細明體]還記得 as2 中被大量使用的 Delegate 麼, as3 中他已經不那麼重要了, 因為函式可以記住自己的作用域[/font]
x/nM9q4]
w)z"h"~
[font=新細明體]as2 的例子: [/font][font=新細明體]import mx.utils.Delegate;[/font]$NGSI-NGn
[font=新細明體]var obj = new Object();[/font]
7W*a#\,q1kI2Sm
[font=新細明體]obj.traceThis = traceThis;[/font]
n:X ]-A
V4jvF
[font=新細明體]obj.traceThis(); // 輸出 true, 也就是 obj 自己[/font]B$`4nm&]h4r!]]D
[font=新細明體]obj.traceThis = Delegate.create(this, traceThis);[/font]
|2LS@ms
]
[font=新細明體]obj.traceThis(); // 輸出 false, 因為我們已經手動把函式作用域指向到了 _root, (as3 中是 Timeline0)[/font] U0hV6V @,tQ3W
[font=新細明體]function traceThis () {[/font]
4LwKoy'|
[font=新細明體]trace(this == obj);[/font]
np.fZ-ht'w
[font=新細明體]}[/font]q/`/@k5B
i/pzt7q
[font=新細明體]as3 的例子, 在 flash 9 alpha 中測試 [/font][font=新細明體]var obj = new Object();[/font]
D.v:S8y:Y.p;@?
[font=新細明體]obj.traceThis = traceThis;[/font]a3e;h}@
S}v
[font=新細明體]obj.traceThis(); // 輸出 false, 沒有作用域的問題了~[/font]#ja~%QP.B]
[font=新細明體]function traceThis () {[/font]b)L#}'Ph9n
[font=新細明體]trace(this == obj);[/font]8G$afROnkk c/Jx)}
[font=新細明體]}[/font]
"@Gl"I B-I
[font=新細明體]與 as1, 2 一樣, as3 也有一套畫圖接口 (Drawing API) 使得我們能夠動態的使用 as 在 Sprite* 和 MovieClip 中畫向量圖。[/font]H%b6I7ovUW9LqqZ&M
[font=新細明體]不過在 as3 中這些方法都沒有被定義在 DisplayObject 中 (如 Sprite, MovieClip 等), 而是在他們的 graphics (flash.display.Graphic) 內容中, 這個 graphics 相當於一個動態繪圖層。[/font]
&Ew{D`}]
[font=新細明體]同時 as3 也提供了一組讓我們更方便繪制矩形, 圓, 甚至遠郊邊框的函式, 他們包含[/font]
/|tbUV!R
[font=新細明體]drawCircle(x:Number, y:Number, radius:Number):void [/font]
Q V&fxWr}8G.b
[font=新細明體]drawEllipse(x:Number, y:Number, width:Number, height:Number):void [/font]
2})N!N5d2n6Zj
[font=新細明體]drawRect(x:Number, y:Number, width:Number, height:Number):void [/font]WJ,uvV"K8cR
[font=新細明體]drawRoundRect(x:Number, y:Number, width:Number, height:Number, ellipseWidth:Number, ellipseHeight:Number):void[/font]
O A [:D.G)e?
[font=新細明體]繪制一個藍色圓角邊框: [/font][font=新細明體]var square:Sprite = new Sprite();[/font]
d9k;[:ut
G
[font=新細明體]square.graphics.beginFill(0xFF);[/font]wy/n.PGoM.K#Y
[font=新細明體]square.graphics.drawRoundRect(0, 0, 100, 50, 10, 10);[/font]
{'oj.D7D:@;b3w
[font=新細明體]square.graphics.endFill();[/font]
m.CG.G7g]-x%w9ql
[font=新細明體]addChild(square);[/font]B3^^0V#e1v3I;?X'Z%nH
[font=新細明體]Sprite 是 MovieClip 的簡化版本, 可以理解成只有一幀的 MovieClip 。[/font] |(P#ai%Sv r[X0WN
[font=新細明體]as3 中新增了一些變數類型, 基本類型 (頂級類, Top Level Class) 包括簡單類型:[/font]mR+GSU v,Tq
[font=新細明體]Boolean [/font]
RK2l g&LA
M7E
[font=新細明體]int [/font]
y%R'I2|xt
[font=新細明體]null [/font]
GNoW0ea+G
[font=新細明體]Number [/font]
M2HSg6k\4g6A$FM5p{
[font=新細明體]String [/font]
bh-zy?#HE`
[font=新細明體]uint [/font]5K$I;W]!K^!AFG
[font=新細明體]undefined[/font]mJ$h e_/VM
[font=新細明體]復合類型 (或許叫做類會比較順口):[/font]
9V.mW4g._qq(?
[font=新細明體]Object [/font]
t:uU#y8pvBw^
[font=新細明體]Array [/font]]6r%f u1U R.?/z
[font=新細明體]Date [/font]6Aly"T'h
[font=新細明體]Error [/font]n iB8xg
[font=新細明體]Function [/font]
_"R(s!XW!]g f2b
[font=新細明體]RegExp [/font]
Z#F,_Uf
[font=新細明體]XML [/font]
4h XX]7~Ip
[font=新細明體]XMLList[/font]MzdT7I9qE4AgR
[font=新細明體]另外還有一些分類到各個包中的諸如 Matrix (flash.geom.Matrix), Shape (flash.display.Shape), URLRequest (flash.net.URLRequest), 等等[/font]
A
a&k
\Y2Q)~G
[b][font=新細明體]一些提示:[/font][/b]
?'^/O7fPE
[font=新細明體]Void 類型在 as3 中使用小寫, Void -> void [/font]
h%EHflT2Z%xB
[font=新細明體]新增了萬能類型 * 用來表示所有類型. 如果你沒有為變數指定類型, 那麼他即是預設類型。[/font]
BmE*RO
[font=新細明體]var anyThing:*[/font].pyNhbV
?m(GgU
[font=新細明體]XML 類不再是 as1, 2 中的 XML. as3 中的 XML 基於 E4X, 允許你像動作普通變數一樣動作 XML (置頂帖中的教程有介紹) [/font]
+l^w7},]lI
[font=新細明體]新增 int 和 uint 類型, 他們在陣列遍曆等不需要小數的場合相當有用. int 類型會比使用 Number 快一點點, 而 uint 通常用來表示顏值等 (據測試 uint 比 Number 慢, int 比 Number 快不了多少)[/font]