Flash CS3 ActionScript 3.0入門

作者: egoldy

性質: 翻譯

閱讀次數: 19205

發表時間: 2007-05-06 15:39:18


聲明:此教程為webstudio翻譯教程,英文原版來自senocularGetting Started with ActionScript 3.0 in Adobe Flash CS3如果轉載本站的中文教程,請注明出處.


隨著flash cs3的到來,同時提供給我們一個嶄新的,針對Adobe Flash(swf)影片和功能程序的標準的程序開發語言。在之前的一段時間里,你可能發現入門ActionScript 3.0與其它版本的ActionScript相比會有一些難度.例如,如果拿ActionScript 1.0到ActionScript 2.0的變化相比的話,那么對于ActionScript變化到ActionScript 3.0可以說是一個比較大的跳躍了。特別是那些傾向于在flash ide中編寫代碼程序員,這篇文章將幫助你如何在flash cs3 ide中工作。

運行環境
1.Flash CS3
2.有一些ActionScript或是Javascirpt基礎
如果不使用CS3或是沒有Flash CS3怎么辦?你可以從這里學習使用免費的flex 2 sdk來學習ActionScript 3. Beginners Guide to Getting Started with ActionScript 3 (Without Learning Flex)

索引
1.    歷史簡介
2.    ActionScript 3 基本的一些不同之處
3.    一般性內容
a.    Variables 變量
b.    Functions 函數
c.    Objects/Classes對象/類
d.    Events 事件
4.    ActionScript和時間線
5.    使用Display Objects.

ActionScript歷史簡介

早期的flash 3中的ActionScript 1.0語法冗長,主要的應用是圍繞著幀的導航和鼠標的交互.這種狀況一直保持到flash 5. 到flash 5版本時ActionScript已經很象JavaScript了。它提供了很強的功能和為變量的傳輸提供了點語法。ActionScript同時也變成 了一種prototyped(原型)語言,允許類似于在javscript中的簡單的oop功能。這些在隨后的flash mx(6)版本中得到的增強。
Flash MX2004(7)引入了ActionScript 2.0,它帶來了兩大改進:變量的類型檢測和新的class類語法。ActionScript 2.0的變量類型會在編譯時執行強制類型檢測。它意味著當你在發布或是編譯你的影片時任何指定了類型的變量都會從眾多的代碼中剝離出來,檢查是否與你現有 的代碼存在矛盾沖突。如果在編譯過程中沒有發現沖突,那么你的swf將會被創建,沒有任何不可理解變量類型的代碼將會運行。盡管這個功能對于flash player的回放來說沒有什么好處,但對于flash創作人員來它是一個非常的好工具,可以幫助調試更大更復雜的程序。
在ActionScript 2.0中的新的class類語法用來在ActionSctipt 2.0中定義類。它類似于Java語言中的定義。盡管Flash仍不能超越它自身的原型來提供真正的class類,但新的語法提供了一種非常熟悉的風格來 幫助用戶從其它語言上遷移過來,提供了更多的方法來組織分離出來As文件和包。

接下來我們進入到flash CS3(9;在flash8中沒有發生多大的變化)ActionScript 3.這里我們不光有一個帶有新的版本號的ActionScirpt 語言,還有一個全新的虛擬機即—Flash Player在回放時執行ActionScript的底層軟件。ActionScript 1和ActionScript 2都使用是AVM1(ActionScript 虛擬機1),因此它們在需要回放時本質上是一樣的,記得我們在ActionScript2上說過它增加了強制變量類型和新的類語法,它實際上在最終編譯時 變成了ActionScript 1,而ActionScript 3.0運行在AVM2上,一種新的專門針對ActionScirpt 3代碼的虛擬機。基于上面的原因,ActionScript 3.0影片不能直接與ActionScript 1和ActionScript 2影片直接通訊(ActionScript 1和ActionScript 2的影片可以直接通訊,因為他們使用的是相同的虛擬機;如果要ActionScirpt 3影片與ActionScirpt 1和ActionScript 2的影片通訊,只能通過local connection),但是你會發現ActionScript 3的改變更深遠更有意義。
下面是各個版本的代碼示范:
ActionScript 1

function Example(){
      this.num = 1;
}
Example.prototype.str = "text";
Example.prototype.doubleNum = function(){
      this.num *= 2;
} 

ActionScript 2

class Example {
      public var num:Number;
      private var str:String = "text";
      public function Example(){
            this.num = 1;
      }
      public function doubleNum():Void {
            this.num *= 2;
      }
} 

注意當編譯時,上面的ActionScript 2類會變成ActionScript 1范例那樣。
ActionScript 3

package {
      public class Example {
            public var num:Number;
            protected var str:String = "text";
            public function Example(){
                  this.num = 1;
            }
            public function doubleNum():void {
                  this.num *= 2;    
            }
      }
} 

ActionScript 3有怎樣的不同呢?

ActionScript 3是不同的,非常的不同。因為不同在實際應用上所以需要一個全新的虛擬機來運行它。但是本質上,它仍是ActionScript,作為 ActionScript你可能 已經注意到了在ActionScript 1和ActionScript 2中的許多命令和程序概念仍然非常好的適用于ActionScript 3.0.盡管上面的范例代碼非常小,我們至少可以看出語法已經改變了。在某些地方ActionScript 3.0與ActionScript 2.0代碼看上去非常相似但并不總是這樣,最終在As2.0與As3.0中直接轉換經常會比較困難。
這些改變是非常必要的,在印象中ActionScript 3.0有很高的功效,在開發過程中不僅是效率(這一點在一些小的但工作量較大的項目中得到證實)還有就是ActionScript 3.0在Flash Player中的回放速度要比ActionScript 2代碼快10倍。好,你可能會發現在ActionScirpt 1和ActionScript 2中的許多并不復雜的任務在ActionScript 3.0中的代碼長度會是原來的兩倍長。但是最終你獲得是它的高速和效率。對于那些經常使用代碼的用戶來說看到了希望,而對于高級的程序員來說將會高興的跳 起來。
下面是一些ActionScript 3中的新特性:
1.運行時排錯—錯誤會運行時拋出以幫助你調試你的影片。
2.運行時變量類型檢測—在回放時會檢測變量的類型是否合法。
3.類封裝—靜態定義的類以增強性能。
4.方法封裝—方法現在與它們相關的類實例綁定因此在方法中的’this’將不會改變。
5.E4X – 一個新的,更易于操作的xml
6.正規表達式—支持本地化正規表達式。
7.命名空間—不但在xml中支持命名空間而且在類的定義中也同樣支持。
8.int和uint數據類型—新的數據變量類型允許ActionScript使用更快的整型數據來進行計算。
9.新的顯示列表模式—一個新的,自由度較大的管理屏幕上顯示對象的方法。
10.新的事件類型模式—一個新的基于偵聽器事件的模式

在哪里輸入Flash CS3代碼

當你在Flash CS3中使用ActionScript 3.0書寫代碼時,你可能正在時間線上書寫代碼。如果你并沒有在時間線上書寫代碼,那么你可以將你的代碼書寫在外部類文件中(也就是說你不能將代碼直接寫 在fla文件中,現在你使用的是哪種方式呢?),在ActionScript 1和ActionScript 2中,你可以在時間線上寫代碼,也可以在選中的對象如按鈕或是影片剪輯上書寫代碼,代碼加入在on()或是onClipEvent()代碼塊中以及一些相 關的事件如press或是enterFrame.這些在ActionScript 3.0都不在可能了。代碼只能被寫在時間上,所有的事件如press和enterFrame現在都很同樣要寫在時間線上。

Figure: 試圖想在選中的對象上輸入代碼時出現的提示,不能應用代碼。

 

變量

變量是在代碼中描述或是容納不同值或數據的名稱。當你在ActionScript 3.0中聲明變量時,你需要使用var關鍵詞

var myVariableName; // 需要使用var

從flash5版本開始,var 關鍵詞就已經可用了,但是在現在的ActionScript 3中它是必須的。例外的情況是在定義動態對象實例的變量數據時。

myDynamicObject.newVar = value; // 不需要var

在上面的例子中,newVar在myDynamicObject對象中新定義的一變量,沒有使用var關鍵詞。實際上,var 關鍵詞從來不在復雜引用中應用,或是任意需要點語法的引用中,或是使用[]引用的變量。
當定義一個變量時你必須使用數字,字符,$符號或下劃線_來命名變量,你不能使用數字開頭的名字來做為變量名稱。如”bits32”,”_bits32”和"$bits32"都是合法的,“32bits”是不合法的因為它的名稱之前使用了數字。
你需要確認你所創建的變量名沒有和你現有的代碼中的變量和代碼內部預置變量沒有沖突。例如,當你在時間線上書寫代碼時,你正在定義一個影片剪輯的實例名稱,如果你試圖將其定義成與flash內置的變量MovieClip名稱相同,你將會得到一個錯誤。

// 任意的時間代碼
var name:String = "Joe"; // 錯誤:與現有的內置變量名稱沖突 

同樣,你不能在全局對象或是函數如Array,XML或是trace中使用。
注意:從Flash Player 7之后,ActionScript 開始區分大小寫,因些變量Name和name是不同的。
ActionScript 3.0中還有一個新的地方是你只能在某一代碼范圍或是時間線代碼上使用一次var,從另一個角度說,如你在一段代碼的頂端聲明了變量x,那么你不能在下面代碼中的x變量使用var 關鍵詞。

var x = value; // ok

…

var x = differentValue; // 錯誤:你只能使用一次var關鍵詞。

當在Flash的時間線上定義變量時,它會應用在整個時間線上,而不只是當前的幀。
當使用var 關鍵詞定義變量時,你可以為其指定變量類型,一個變量變量類型描述是它將存放的是哪種類型的數據。這個特性是從ActionScript 2.0開始的,一直繼續到現在的ActionScript 3.0. 例如,如果你想讓變量x是一個數值,那么你可以為它指定一個數值型如下。

var x:Number; // 變量x將用于承載數值型數據

在兩個版本的ActionScript中,書寫看上去是自由的,然而ActionScript 3 會在影片回放時保持書寫信息的一些檢查,不象在ActionScript 2.0中,在編譯才會進行錯誤檢查。這意味著你需要對你所使用的類型做出更多的判斷,特別是你不能在ActionScript 3中針對一個變量使用兩次var 關鍵詞(而在ActionScript 2.0中將允許你針對同一變量使用不同的變量類型).
對于根本沒有類型的變量來說,在ActionScript 3.0中你可以為其指定任意類型。它提供了一個特殊的類型”untyped”類型,它描述的是---沒有類型。它的呈現方式是(*).
var anyValue:*; // 變量可以是任意的類型
為變量指定類型是個好的習慣,因為它可以引導更好的進行錯誤檢查。在使用untyped類型時,你可以在指定為untyped類型加下一些說明,以便在其它人看代碼時不至于去猜測。
如果你沒有為一個變理提供一個默認的值,它將被系統默認的根據所設置的類型指定一個數值。如果沒有設置變量類型,它將被指定一個undefined做為數值。下面列表中列出了在ActionScript 3.0不同的數據數據類型的默認值。

var untyped:*; // (or no typing) undefined

var boolean:Boolean; // false

var number:Number; // NaN

var integer:int; // 0

var unsignedInteger:uint; // 0

var string:String; // null

var object:Object; // null 

任何對象類型的默認值都是null.需要注意的object類型(任何對象包括arrays 和我們自定義類的對象)的默認值都是null,而不是undefinded。實際上在ActionScript中對象不能是undefined。如果他們 沒有值,那么他們就是空null。只有類型為untyped的變量或償試訪問的變量不存在時才會得一個undefined值。
Number類型現在有了一個唯一值,而不在是undefined或是null了。如果他們沒有值,那么他們的值為NaN(“不是一個數值 “)。NaN是一個比較巧妙的值,然而,你不能真正的拿一個NaN與另一個NaN去比較因為他們可能并不一樣。如果你需要檢查一個數值是否為NaN,你需 要使用isNaN語法。

if (isNaN(myNumber))  //檢查myNumber是否已定義.

Int和uint變量類型是ActionScript 3中新增的類型。它們是用來指定描述32位整形或整數的。Int類型是一個標準的整型,uint是一個未標記的整型,或不為負值的整數。這些數值只能是整 數值,他們不能為空null,undefined,或是NaN。你可能已經注意到這兩種類型的寫法為int和uint,他們的第一個字母并沒有大寫,這意 味著他們并不是特定指定給對象或是與類關聯的類型,相反,這些類型本質上與Number類型共享(在MIN_VALUE和MAX_VALUE中的應用)
還有另外一個類型也沒有首字母大寫,這就是void類型,在ActionScript 2.0中它的首字母是大寫的,但是在ActionScript 3中它的首字母不在大寫了,類似于int和uint,并沒有特殊的定義與其相關聯。這種類型通常用于指定給函數。

+++++++++++++++++++++++++++++++++++++++++++++++++
函數

函數是用來定義可用的部分代碼或是在ActionScript中的自定義運算。通過創建軍函數你可以執行多次重復的運算,而不需要在你應用的過程中一遍一遍的重寫相同的功能。
在ActionScript中有兩中定義函數的方法,你可能使用下面的格式來創建一個指定名稱的函數,如[functionName]([參 數]){[some code]}或你可以定義一個沒有指定名稱的函數(匿名函數)使用如下的格式var[functionName]=function([參數]) {[some code]}.兩者本質上都是創建一個變量,Function函數為變量值,只是第二種方式看上去更直接而已。

// 指定名稱的函數
function doubleNumber(num) {

      return num*2;

} 

// 同樣的沒有指定名稱的函數
var doubleNumber = function(num) {

      return num*2;

} 

上面的例子中創建了一個名為doubleNumber的函數,它接受一個單一的數值,并返回乘以2的數值。如果要使用它,你使用()括號來調用它。如下。

var x:Number = 10;

trace(doubleNumber(x)); // traces 20 

作為一個變量,命了名的函數一旦在時間軸上定義后將不能再被定義。
當為函數指定類型時,需要指定參數列表(你指定給函數的參數,多個參數用逗號隔開)和返回值的類型。當使用未命名函數時,變量名將被指定為Function類型。

// 命名函數

function doubleNumber(num:Number):Number {

      return num*2;

} 

// 相同功能的未命名函數。
var doubleNumber:Function = function(num:Number):Number {

      return num*2;

} 

如果一個函數沒有返回值,那么它返回的類型將是void.當一個類型為void的函數被執行,或使用返回命令返回數值失敗時,它的返回值變為undefined.

function returnsNothing():void {

      // do nothing

}

trace(returnsNothing()); // trace的結果為undefined. 

上面的returesNothing()函數不光沒有返回任何內容,而且也不接收任何數值---它沒有參數列表。在ActionScript3中如果你試圖向一個沒有參數列表的函數中傳遞參數,你將會得到一個錯誤。

returnsNothing(3); // 錯誤:不正確的參數值 

在ActionScript 2中,Void類型被用于做為函數的參數列表定義,用來標識此函數沒有參數。在ActionScript 3.0中,你只將要參數列表留空即可。
注意:parameters和arguments是不同的,parameters(參數)是用在函數的定義中。Arguments是在函數中應用的真正的值。你可以把arguments看作是參數值。
在ActionScript 3中,你可能夠只接在函數參數中定義默認值。

// 這里,message參數是任意指定的。
function usesDefault(message:String = "hello"):void {

      trace(message);

}

usesDefault("test"); // trace結果為 "test"
usesDefault(); // trace結果為"hello",即默認值。

使用默認參數值,你不但可以得到一個指定的默認參數值,而且可以讓你定義的函數可以有任意的參數,甚至是不被使用的參數。在函數調用時,那些沒有默認值的 參數必須要提供,基于這一點,所有的自由定義的有默認值的參數都要定義在參數列表之后。你不能把那些必須的參數定義在自由定義的有默認值的參數之后。

// 錯誤:沒有必須的參數
// num定義在了message之后。
function usesDefault(message:String = "hello", num:Number):void {

      // code

} 

// 正確; usesDefault至少需要一個參數,最大是兩個參數

// least 1 argument, accepts 2 at max

function usesDefault(num:Number, message:String = "hello"):void {

      // code

} 

那么如何讓一個函數在調用時可以有任意數量的參數呢?,在ActionScript 2.0中,你只需要簡單的刪去參數列表然后通過引用arguments對象即可。在ActionScript 3.0中,已經沒有了真正的參數列表,這意味著使用任何argument的函數將無法被調用。取而代之的是,你不得不使用一個新的參數類型為…(rest 其它).它放置在你的參數列表之后(或者它就是你的整個參數),當調用函數時你可以使用任意數量的參數。…(rest)參數要被寫成如下格式… [argumentsArrayName],arrgumentsArrayName是一個數組,它用來承載所傳遞的參數。

function passAnything(...statements):void {

      trace(statements.length +": "+ statements);

}

passAnything(); // traces 0:
passAnything(1); // traces 1: 1
passAnything("a", true, 0); // traces 3: a,true,0 

注意:當使用…(rest)參數時,當函數調用時arguments對象不在可用了。取而代之的是…(rest)參數用來獲得傳遞的參數。然而… (rest)并不象早期版本的arguments,它不在有caller屬性來引用當前的函數。在ActionScript 3.中,arguments和…(rest)兩者都沒有callee屬性來引用當前所調用的函數。(callee 在ActionScript2.0中的arguments 對象中是可用的,但是ActionScript 3.0中已移除).


[未完待續.....]

服務項目_SERVICE

關于我們

萬博思圖(北京)信息技術有限公司,專業的flash,flex開發團隊,5年經驗。公司致力于互聯網上的業務的開展,對于互動網站行銷,互聯網應用程序開發有成熟的解決方案。我們關注互聯網市場動態,關注新技術,更注重在新的領域不斷探索發現。
萬博思圖業務內容主要包括企業品牌Flash網站開發,企業形象宣傳Flash設計,動畫,多媒體演示,Flex企業級應用程序開發,擁有眾多成功案例,歡迎來電咨詢。
 
COPYRIGHT BY WEBSTUDIO INTERACTIVE DESIGN Co.,Ltd. ALL RIGHTS RESERVED.
公司地址: 北京市朝陽區朝外SOHO D 座727室 郵編: 100026 EMAIL: [email protected]
電話: 010-59070059 / 010-86390986-802  手機: 13693660520 傳真: 010-59070059-801
京公網安備:110108006741      京ICP備:05013074號-1
王先生
浙江6十1开奖结果规则 四川麻将 幸运飞艇精准交流群 星悦陕西麻将app下载 今晚一码一肖大公开 神来棋牌外挂 大地棋牌客服中心 闲来广东麻将下载安 河北十一选五任选五 排列3试机号金码 安卓手机如何下载哈灵麻将 如何算股票涨跌幅 广东11选5官网开奖 501668旺旺高手论坛一 永利皇宫棋牌下载苹 …? 姚记棋牌官方下载 安徽快3开将结果