天天看點

AS3學習筆記(1-6)

 首先 say hello 一下,在輸出面闆 trace 出 “Hello World!”。複習一下AS2的類代碼:

class net.eidiot.learnAS3.HelloAs2{

    public function HelloAs2(){

        trace("Hello World!");

    }

}

為了讓這段代碼工作,需要在Flash IDE裡場景的第一幀輸入代碼:

import net.eidiot.learnAS3.HelloAs2;

var hello:HelloAs2 = new HelloAs2();

再來看看AS3的類:

package net.eidiot.learnAS3

{

    import flash.display.Sprite;   

    public class HelloAs3 extends Sprite

    {

        public function HelloAs3(){

            trace("Hello World!");

        }

    }

}

打開Flash 9,在文檔屬性的“Document class”裡輸入包名和類名,如圖:

[img]/uploads/allimg/080401/1736360.gif[/img]

下面來看看差別。在AS3的類裡多了一個package關鍵字,後面跟上類的包名(如果fla和類放在相同的檔案夾就可以什麼都不跟)。這樣在聲明類的時候就不用帶上包名了。

public class HelloAs3 extends Sprite

class 關鍵字的前面多了一個 public 。在AS3裡類還可以是 internal 。如果聲明類為 internal 則隻有同一個包裡的其他類可以引用導入,包外的任何類都将通路不到它。此類繼承了 Sprite 。AS3的類如果想使用 MC 的事件或方法必須讓它繼承 MovieClip 或者 Sprite 。Sprite 可以了解為沒有時間軸的 MovieClip 。

最後一步是把它設定為 fla 的 Document class ,這樣類 HelloAs3 就和文檔 helloAs3.fla 綁定在一起了。關于 Document class 可以參考黑羽的文章:

[url=http://www.blueidea.com/tech/multimedia/2006/3709.asp]Document Class特色為我們帶來了什麼[/url]

是不是感覺AS3太麻煩了?高射炮打蚊子,是要費勁一點的。

[1b]源檔案:[/1b]

[url=http://www.blueidea.com/articleimg/2006/07/3854/hello.rar][1b]hello.rar[/1b][/url]

嘗試用AS3做一個簡單的計數器。先來看看最後的效果:

[url=http://www.blueidea.com/articleimg/2006/07/3854/timer.swf][1b]

[color="#444444"]執行個體效果[/color]

[/1b][/url]

[url=http://www.blueidea.com/articleimg/2006/07/3854/ShowTimer.swf]

[color="#444444"]檢視類代碼[/color]

[/url]

public function ShowTimer(){

    stage.scaleMode = StageScaleMode.NO_SCALE;

    stage.align = StageAlign.TOP_LEFT;

    initMc();

}

AS3裡新加了很多的常量來代替字元串。這給我們帶來了很大的友善。比如要限制影片的縮放模式為固定尺寸,AS2時的代碼為

Stage.scaleMode = "noScale";

值是一個字元串,在輸入的時候是沒有代碼提示的,很容易輸錯(我經常是到幫助文檔裡把字元串複制過來)。而在AS3裡的代碼為:

stage.scaleMode = StageScaleMode.NO_SCALE;

原來的字元串 “noScale” 由常量 StageScaleMode.NO_SCALE 代替。這樣可以使用代碼提示自動完成,有效避免了因為輸錯而造成的程式bug(而且很友善  )。同樣的字元串常量還有一些事件類型比如 MouseEvent.CLICK 代替”click” 等等。

private function initMc():void{

    showTxt = new TextField();

    addShow(showTxt,10,10,310,20);

    addLabel(setDelayLabel,10,40,"delay:");

    //...other code

}

添加文本框和按鈕。注意,需要再次引用的文本框必須顯式初始化,否則在其他地方引用此變量将傳回 null 。

private function addLabel(txt:TextField,x:uint,y:uint,text:String):void{

    txt = new TextField();

    txt.x = x;

    txt.y = y;

    txt.text = text;

    addChild(txt);

}

AS3裡所有的東西都是 new 出來的。僅僅 new 出來還不行,必須使用 addChild() 把它添加到顯示清單裡。

private function addBtn(mc:Sprite,...,clickHanlder:Function):void{

    mc.mouseChildren = false;

    mc.graphics.beginFill(0x000000,0.3);

    mc.graphics.drawRect(0,0,w,h);

本文轉自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1737.html