ActionScript的基本文法規則

來源:互聯網
上載者:User
文法   該教程詳細介紹了使用ActionScript編寫指令碼時應遵循的基本文法規則,是AS初學者的必讀教程……

  使用ActionScript編寫指令碼時,如果使用正常模式的動作面板,通過菜單和列表選擇選項,可以建立簡單的動作。要想用ActionScript編寫功能強大的指令碼,你就必須深入瞭解和學習Flash MX的ActionScript指令碼語言。

  像其它指令碼語言一樣,ActionScript也有變數、函數、對象、操作符、保留關鍵字等語言元素,有它自己的文法規則。ActionScript允許使用者建立自己的對象和函數。ActionScript的文法和風格與javascript非常相似,但不完全相同。ActionScript擁有自己的句法和標點符號使用規則,這些規則規定了一些字元和關鍵字的含義,以及它們的書寫順序。例如,在英語中用句號結束一個句子,而在ActionScript中則用分號結束一個語句。

  下面列出的是ActionScript的一些基本文法規則,對於比較比較特別的規則,請參閱ActionScript詞典。

  1.點文法

  在ActionScript中,點(.)被用來指明與某個對象或電影剪輯相關的屬性和方法。它也用標識指向電影剪輯或變數的目標路徑。點文法運算式由對象或電影剪輯名開始,接著是一個點,最後是要指定的屬性、方法或變數。例如,運算式ballMC.x是指電影剪輯執行個體ballMC的_X屬性,_X電影剪輯屬性指出編輯區中電影剪輯的X軸位置。

  例如,submit是在電影剪輯form中設定的一個變數,而form又是嵌套在電影剪輯shoppingCart中的電影剪輯。運算式shoppingCart.form.submit=true的作用是設定執行個體form的submit變數的值為true。

  表達一個對象或電影剪輯的方法遵循相同的模式。例如,ballMC執行個體的play方法用於移動ballMC的時間軸播放頭,就像下面的語句:

ballMC.play();

  點文法使用兩個特殊的別名:_root和_parent。別名_root是指主時間軸。可以使用_root別名建立一個絕對路徑。例如,下面的語句調用主時間軸中電影剪輯functions的buildGameBoard函數:

_root.functions.buildGameBoard();

  Flash MX允許使用別名_parent來引用嵌套當前電影剪輯的電影剪輯。也可以用_parent建立一個相對目標路徑。例如,如果電影剪輯dog被嵌套在電影剪輯animal之中,那麼,在執行個體dog上的下列語句告訴animal電影剪輯停止播放:

_parent.stop();

  2.斜杠文法

  Flash的以前版本是使用斜杠文法指齣電影剪輯或變數的目標路徑的。Flash MX播放器仍然支援這種文法,但不推薦使用。在斜杠文法中,斜杠被用來代替點,用以標明電影剪輯或變數的路徑。要指出一個變數,可以在變數前加上冒號,如下面的語句所示:

myMovieClip/childMovieClip:my Variable

  我們現在用點文法取代上述斜杠文法來表示上面的目標路徑:

myMovieClip.childMovieClip.myVariable

  斜杠文法在tellTarget動作中使用最為普遍,但這種動作在Flash MX中已不再推薦使用。

  【說明】與其使用tellTarget動作還不如使用with動作與點文法相容。

  3.大括弧

  ActionScript語句用大括弧({})分塊,如下面的指令碼所示:

on(release){   myDate = new Date();   currentMonth = myDate.getMonth();}

  4.分號

  ActionScript語句用分號(;)結束,但如果你省略語句結尾的分號,Flash仍然可以成功地編譯你的指令碼。例如,下面的語句用分號結束:

colum = passedDate.getDay();row = 0;

  同樣的語句也可以不寫分號:

colum = passdDate.getDay()row = 0

  5.圓括弧

  定義一個函數時,要把參數放在圓括弧中:

 function myFunction (name, age, reader){  … }

  調用一個函數時,也要把要傳遞的參數放在圓括弧中:

 myFunction ("Steve",10,true);

  圓括弧可以用來改變ActionScript的運算優先順序,或使自己編寫的ActionScript語句更容易閱讀。

  也可以用圓括弧來計算點文法點左邊的運算式。例如,在下面的語句中,圓括弧使運算式new color(this)得到計算,並建立了一個新的顏色對象:

onClipEvent(enterFrame){  (new Color(this)).setRGB(oxffffff);}

  在上例中,如果不使用圓括弧,就需要在代碼中增加一個語句來計算它:

  onClipEvent(enterFrame){    myColor = new Color(this);    myColor.setRGB(0xffffff); }

  6.大小寫字母

  在ActionScript中,只有關鍵字區分大小寫。對於其餘的ActionScript,可以使用大寫或小寫字母。例如,下面的語句是等價的:

cat.hilite = true;
CAT.hilite = true;

  但是,遵守一致的大小寫約定是一個好的習慣。這樣,在閱讀ActionScript代碼時更易於區分函數和變數的名字。如果在書寫關鍵字時沒有使用正確的大小寫,你的指令碼將會出現錯誤。例如下面的兩個語句:

setProperty(ball,_xscale,scale);
setproperty(ball,_xscale,scale);

  前一句是正確的,後一句中property中的p應是大寫而沒有大寫,所以是錯誤的。在動作面板中啟用彩色文法功能時,用正確的大小寫書寫的關鍵字用藍色區別顯示,因而很容易發現關鍵字的拼字錯誤。

  7.注釋

  需要記住一個動作的作用時,可在動作面板中使用comment(注釋)語句給幀或按鈕動作添加註釋。如果你在協作環境中工作或給別人提供範例,添加註釋有助於別人對你編寫的指令碼的正確理解。

  在動作面板中選擇comment動作時,字元“//”被插入到指令碼中。如果在你建立指令碼時加上注釋,即使是較複雜的指令碼也易於理解,例如:

  on(release){    //建立新的日期對象    myDate = new Date();    currentMonth=myDate.getMonth();    //把用數字表示的月份轉換為用文字表示的月份    monthName = calcMoth(currentMonth);    year = myDate.getFullYear();    currentDate = myDate.getDat();  }

  在指令碼視窗中,注釋內容用粉紅色顯示。它們的長度不限,也不影響匯出檔案的大小。

  8. 關鍵字

  ActionScript保留一些單詞,專用於與本語言之中。因此,不能用這些保留字作為變數、函數或標籤的名字。下表列出了ActionScript中所有的關鍵字:

break continue delete else
for function if in
new return this typeof
var void while with

  【注意】這些關鍵字都是小寫形式,不能寫成大寫形式。

  9.常量

  常量有其值永不改變的屬性。常數用大寫字母列於動作工具箱中。例如,常數BACKSPACE、ENTER、QUOTE、RETURN、SPACE和TAB是Key對象的屬性,指鍵盤上的鍵。要測試使用者是否在按Enter鍵,可使用下面的語句:

  if(keycode()= =key.ENTER){    alert = "你準備好了嗎?"    controlMC.gotoAndStop(5);  }

   ActionScript中的術語

  ActionScript根據特定的文法規則使用特定的術語。以下按字母順序介紹重要的ActionScript術語.

  Actions(動作):是指導Flash電影在播放時執行某些操作的語句。例如,gotoAndStop動作就可以將播放頭轉換到指定的幀或幀標記。

  Action(動作)也可以被稱作statement(語句)。

  Arguments(參數):是允許將值傳遞給函數的預留位置。例如,以下語句中的函數welcome就使用了兩個參數firstName和hobby來接收值:

function welcome(firstName,hobby) { welcomeText = "Heelo," + firstName + "I see you enjoy" + hobby;}

  Classed(類):是各種資料類型。使用者可以建立“類”並定義對象的新類型。要定義對象的類,使用者需建立構造器函數。

  Constants(常量):是不會改變的元素。常量對於值的比較非常有用。

  Constructors(構造器):是用來定義“類”的屬性和方法的函數。以下代碼通過建立Circle構造器函數產生了一個新的Circle類。

function Circle(x, y, radius) { this.x =  x; this.y = y; this.radius = radius;}

  Data types(資料類型):是可以執行的一組值和操作。ActionScript的資料類型包括:字串、數值、邏輯值、對象和影片剪輯。

  Events(事件):是在電影播放過程中發生的動作。例如,當電影裁入時、當播放頭到達某一幀時、當使用者單擊按鈕或影片剪輯時、當使用者按壓鍵盤上的按鈕時,都會產生不同的操作。

  Expressions(運算式):是可以產生值的語句。例如2+2就是一個運算式。

  Functions(函數):是可以重複使用和傳遞參數的程式碼片段,可以返回一個值。例如,getProperty函數就可以使用影片剪輯的執行個體名稱和屬性名稱,返回屬性值。getVersion函數可以返回當前播放電影的Flash播放器的版本。

  Handlers(控制代碼):是可以管理諸如mouseDown和load事件的特殊動作。例如,onMouseEvent和onClipEvent就是ActionScript的控制代碼。

  Identifiers(標識符):是用來指示變數、屬性、對象、函數或方法的名稱。標識符的首字母必須是字元、底線(_)或貨幣符號($)。後續字元可以是字元、數字、底線或貨幣符號。例如,firstName就是一個變數名。

  Instances(執行個體):是屬於某些class(類)的對象。每個類的執行個體都包含該類的所有屬性和方法。例如,所有影片剪輯執行個體都包含MovieClip類的屬性(透明度屬性、可見度屬性)和方法(例如gotoAndPlay、getURL等)。

  Instance names(執行個體名稱):是一個唯一的名稱。可以在指令碼作為目標被指定。

  Keywords(關鍵字):是具有特殊意義的保留用詞。例如,var就是一個關鍵字,它可以用來定義本地變數。

  Methods(方法):是指定給對象的函數。在函數被指定給對象之後,該函數就可以被稱為是該對象的方法。

  Objects(對象):是屬性的集合。每個對象都有自己的名稱和值。對象允許使用者訪問某些類型的資訊。例如,ActionScript的預定義對象Date就提供了系統時鐘方面的資訊。

  Operands(運算項):是由運算式中的運算子操控的值。

  Operators(運算子):可以從一個或多個值中計算獲得新值。例如,將兩個數值相加就可以獲得一個新值。

  Parameters(參數):也被稱之為Arguments(參數)。

  Properties(屬性):是定義對象的attributer(屬性)。例如,所有影片剪輯對象都具有_visible(可見度)屬性,通過該屬性可以決定影片剪輯是否顯示。

  Target paths(目標路徑):是Flash電影中影片剪輯名稱、變數和對象的垂直分層結構地址。主時間軸的名稱是_root。影片剪輯屬性偵測器中可以命名影片剪輯的執行個體。

  使用者可以通過目標路徑使動作指向影片剪輯,也可以使用目標路徑擷取或設定變數的值。例如,以下樣本語句就是影片剪輯stereoControl內部的變數volume的路徑:

-root.stereoControl.volume

  Variables(變數):是儲存了任意資料類型值的標識符。變數可以建立、修改和更新。變數中儲存的值可以被指令碼檢索使用。在以下的樣本中,等號左邊的是變數標識符,右邊的則賦予變數的值:

x = 5;name = "Lolo";customer.address = "66 7th Street";c = new Color(mcinstanceName);

  編寫ActionScript指令碼

  編寫Flash動作指令碼並不需要使用者對ActionScript有完全的瞭解,使用者的需求才是真正的目標。有了設計創意之後,使用者要做的就是為此選擇恰當的動作、屬性、函數或方法。學習ActionScript的最佳方法是建立指令碼。使用者可以在動作面板的協助下建立簡單指令碼。一旦熟悉了在電影中添加諸如play和stop這樣的基礎動作之後,使用者就可以開始學習更多有關ActionScript的知識。要使用ActionScript的強大功能,最重要的是瞭解ActionScript語言的工作原理:ActionScript語言的基礎概念、元素以及用來組織資訊和建立互動電影的規則等。

  1.指令碼的規劃和調試

  在為整個電影編寫指令碼時,指令碼的數量和變化可以可能都是巨大的。例如,使用者可能需要考慮以下問題:決定使用哪些動作,如何建立更有效指令碼結構,以及在哪些地方放置指令碼?所有這些問題都需要經過仔細規劃和測試。特別是當電影變得越來越複雜時,這些問題更加顯得突出。

  在開始編寫指令碼之前,使用者需明確自己要達到的目標。例如,這些目標可能是使用Flash建立整個網站。

  ? 詢問網站訪問者姓名,並且在整個網站中重複使用該資訊。

  ? 網站具有一個可拖動的導航工具列,可以協助使用者跳轉到網站的任意分支。

  ? 當某一個按鈕被單擊時,新的內容以淡入方式出現在舞台中央。

  ? 專門設立一個和使用者聯絡的情境,其中包含已經填入使用者姓名的表單。

  在明確了製作動畫要達到的目的之後,使用者就可以開始建立對象並編寫指令碼來控制這些對象。

  讓指令碼按照自己需要的方式工作,這通常比編寫指令碼要花費時間。使用者需要經常不斷地測試自己的指令碼是否工作正常。為達到目的,最好的方法是從簡單指令碼開始,頻繁測試,編寫並測試完一部分可正常工作的指令碼之後,就可以儲存檔案的一個版本。這種工作方法可以協助使用者更有效地調試指令碼錯誤,在編寫更加複雜的指令碼時也有堅實的基礎。

  2.物件導向的指令碼編程

  在物件導向的編程方法中,使用者通過將資訊分類成組來組織資訊。使用者可以建立某一類資訊的多個執行個體,以便在指令碼中使用。使用者可以使用ActionScript預定義的class(類),也可以建立自己的類。ActionScript內建的類位於動作在板的Objects(對象)檔案夾。

  在建立class(類)時,使用者需為由該類所建立的每個對象定義所有屬性(特性)和方法(行為)。這和現實世界中對象的定義方法一樣。例如,“人”具有諸如性別、身高和頭髮顏色之類的屬性,“人”的行為包括說話、走路、投擲等,在本樣本中,“人”就是一個類,而每個單獨的人就是該類的執行個體,即Object(對象)。

  ActionScript中的對象可以包含資料,也可以是舞台上的影片剪輯。所有影片剪輯都是預定義的MovieClip類的執行個體。每個影片剪輯執行個體都有MovieClip類的所有屬性(例如_height,高度;_rotation,旋轉;_totalframes,總幀數等)和所有方法(例如,gotoAndPlay,轉到並播放;loadMovie,載入電影;startDrag,開始拖動等)。

  要定義class(類),使用者需建立一個特殊的被稱為“構造器”的函數。Flash預定義的類已經定義了構造器函數。例如,如果需要電影中一個騎車人的資訊,則可以建立一個名為Biker的構造器函數。該函數包括“時間”和“距離”屬性,也包含“速度”方法,該方法可以將騎車人的移動速度告訴使用者。

function Biker(t, d) { this.time = t; this.distance = d;}function Speed() { return this.time/this.distance;}Biker.prototype.rate = Speed;

  在編寫構造器函數之後,使用者就可以建立Biker類的副本,即:執行個體。以下代碼就可以建立Biker類對象的執行個體emma和hamish:

emma = new Biker(30, 5);hamish = new Biker(40,5);

  執行個體之間還可以相互連信。例如,對於Biker類的對象來說,使用者可以建立一個shove(推)的方法,讓一個騎車人推另外一個騎車人。這樣,當hamish執行個體靠得太近時,emma執行個體就可以調用shove方法,將hamish推開。要將資訊傳遞給方法,可使用參數。例如,shove(推)方法就可以攜帶who(被推者)和howFar(推多遠)參數,如下列樣本。

emma.shove(hamish, 10);

  在物件導向編程方法中,類可以按指定順序相互接收屬性和方法,這就是所謂的繼承。使用者可以使用繼承擴充或重定義類的屬性和方法,從其他類繼承屬性和方法的類被稱為“子類”,將屬性和方法傳遞給其他類的類被稱為“超類”,一個類可以同時是“子類”和“超類”。

  3.指令碼的流程

  Flash將從第一行語句開始執行ActionScript語句,一直按次序執行到最終語句或ActionScript指定跳轉到的語句。

  將執行次序發送到其他地方而不是下一語句的動作包括:if語句、do…while迴圈和return動作。

  if語句被稱為條件判斷語句或“邏輯分支”,因為它是基於某些條件的評估判斷來控制指令碼流程的。例如,以下代碼就將檢查變數mynumber中的值是否否小於或等於10,如果檢查結果返回true(例如,mynumber的值為5),則變數alert被設定文本字串值,並在輸出的文本域中顯示其值。

if (myNumber <=10) {  alert = “The number is less than or equal to 10”;}

  使用者也可以添加else語句來建立更加複雜的條件判斷語句。在以下樣本中,如果條件判斷返回true(例如,變數mynumber的值為3),則第一組大括弧之間的語句將執行,alert變數將顯示第二行的值。如果條件判斷返回false(例如,變數mynumber的值為30),則第一組代碼區將被跳過,else語句後面的大括弧之間的語句將執行。

if (myNumber <=10) {  alert = “The number is less than or equal to 10”;}else {  alert = “The number is greate than 10”;}

  迴圈語句將重複執行某一動作若干次,直到滿足某一條件才結束。在以下樣本中,影片剪輯將被複製5次。

i = 0;do {  duplicateMovieClip ("myMovieClip","newMovieClip"+i,i);  newName = eval("newMovieClip"+i);  setProperty(newName,_x,getProperty("myMovieClip",_x)+(i*5));  i=i+1}while(i<=5);

  4.指令碼的運行

  在編寫指令碼時,使用者可以使用動作面板,將指令碼附加給時間軸中的幀,也可以附加給舞台上的按鈕或影片剪輯。附加給幀的指令碼將在播放頭到達該幀時執行,而附加給按鈕或影片剪輯的指令碼則在某一事件發生時執行。所謂的“事件”,可以是電影播放時滑鼠移動、某個按鈕被按下,也可以是某個影片剪輯被載入等。使用ActionScript可以發現操作發生的時間,然後根據該事件執行指定的指令碼。

  附加給按鈕或影片剪輯的動作被一個特殊的動作包圍,該動作被稱之為handler(處理常式),onClipEvent和on動作都被稱之為處理常式,中因為它們操控或管理著操作。使用者可以為每個處理常式指定一個或多個操作。當由處理常式指定的事件發生時,影片剪輯或按鈕動作才執行。如果要在不同的事件發生時執行不同的動作,則可以給一個對象附加多個處理常式。

  onClipEvent動作處理的是影片剪輯的事件,而on動作則處理按鈕的事件。使用者也可以和影片剪輯一起使用on動作,建立一個能接受滑鼠事件的影片剪輯。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。