AS動作腳本

AS動作腳本是flash中用到的腳本語言。

簡述

flash中用到的腳本語言,在flash中十分重要,用它可以實現flash動作的實現

定義

AS是ActionScript的縮寫
ActionScript 動作腳本 是遵循 ECMAscript第四版 的 Adobe Flash Player 運行時環境的程式語言。它在 Flash Player內容和應用程式中實現互動性、數據處理、以及其他功能。
ActionScript 是由 Flash Player 中的 ActionScript虛擬機(AVM)來執行。
ActionScript代碼通常被編譯成“位元組碼格式”。
ActionScript 的主要 IDE 是 Adobe 公司的 Flash 和 Flex,最新版本 CS3(即flash9.0 和 flex3.0),2007年4月上市。

發展

從macromedia大刀闊斧對As1.0進行改革到AS2.0,這一段過程看上去還算長一些,從flashmx到flash mx2004到flash 7.2再到flash8. 它們的核心actionscript都是as2.0.在flash8剛剛發布不長時間,macromedia又緊羅密鼓的推出了flash9預覽版,大家都已經知道了Adobe發布的預覽版可以對AS3.0進行編譯,而As3.0經過測試它的速度可以說要比之前的as2.0快10倍.拿著as3.0與As2.0相對比,雖然有些東西看著面熟,但它看上去就象是重寫的一種新語言一樣.還有隨之推出的adobe的Flex 2.0 builder. Flex sdk.讓許多人一時不知所措

· Flash Player 2

第一個支持腳本的版本,包括控制時間軸的gotoAndPlay,gotoAndStop,nextFrame和nextScene等動作。

· Flash Player 3

增強了載入外部SWF檔案的基本腳本支持(loadMovie)。

· Flash Player 4

第一個完全實現腳本功能(稱為動作)的播放器。這些腳本擁有簡練的語法和對循環,條件,變數和其它基本語言結構的支持。

· Flash Player 5

第一個擁有真正意義上的ActionScript的版本。依據ECMAScript並採用基於原型編程,並允許完全的 過程式編程和面向對象編程。

· Flash Player 6

增加了事件處理模型,並且支持switch

· Flash Player 7

Flash Player 7 提供一些新特性如支持CSS顯示文本和增強顯示效果。Macromedia Flash編譯器和Flash Player 7同時支持基於ECMAScript 4 Netscape Proposal的類程式語言ActionScript 2.0。不過ActionScript 2.0能交叉編譯成ActionScript 1.0的位元組碼,因此它能運行於Flash Player 6。

· Flash Player 8

增加用於運行時圖象數據控制和檔案上傳的新類庫及APIs,ActionScript 2.0功能更為完善。

· Flash Player 8.5

(計畫於2006春發布release版本,currently in public beta):增加ActionScript 3.0和一個稱為AVM2(ActionScript Virtual Machine 2)新的虛擬機,它可以與前版本AVM1共存以便支持舊內容。增強性能是該版本的主要目標。

· Flash Player 9

2007發表,這是adobe收購Macromedia後的第一個版本,並且也是Mac OS X上第一個Universal版本的Flash Player。

基本記法

ActionScript 2.0
下面列印Hello World。值得注意的是這只能在整合環境下執行,因為trace函式只有支持整合環境。
trace("Hello world!");
下面代碼利用onMouseMove事件當滑鼠移動時輸出現行滑鼠位置。同樣的這隻有在整合環境下執行。
onMouseMove = function () {
trace("X: "+_root._xmouse);
trace("Y: "+_root._ymouse);
};
這個較先進的範例創造一個包括數字與字元串的數組,並利用原形函式(prototype function)與函式遞歸變數名num指定一個數,給變數str指定一個字元串。然後,利用MovieClip應用程式接口,文字區域被顯示在螢幕上,文字區域裡頭寫入了變數值。
var my_Array:Array = new Array("Hello","ActionScript",3,7,11,"Flash");
Array.prototype.pickNumber = function():Number {
var rand:Number = random(this.length);
return (typeof (this[rand]) == "number") this[rand] : this.pickNumber();
};
Array.prototype.pickString = function():String {
var rand:Number = random(this.length);
return (typeof (this[rand]) == "string") this[rand] : this.pickString();
};
var num:Number = my_Array.pickNumber();
var str:String = my_Array.pickString();
_root.createTextField("txt",1,10,10,530,390);
txt.text = "Array = "+my_Array+"\nRandom Number = "+num+"\nRandom String = "+str;
ActionScript 3.0
下面先進的Hello World程式目前需要在Flex 2.0公開Alpha測試版整合環境中編譯。
package {
import flash.text.TextField;
import flash.display.MovieClip;
import flash.filters.DropShadowFilter;
public class HelloWorld extends MovieClip {
public function HelloWorld() {
var shad:DropShadowFilter = new DropShadowFilter(2,45,0x000000,25,3,3,2,2);
var txt:TextField = new TextField();
txt.textColor = 0xFFFFFF;
txt.filters = [shad];
txt.width = 120;
txt.x = Math.random()*300;
txt.y = Math.random()*300;
txt.selectable = false;
txt.text = "Hello World! ["+Math.round(txt.x)+","+Math.round(txt.y)+"]";
addChild(txt);
//-----ActionScript3.0----------------- //as3.0最重要的概念就是在效能方面的增進,平時所加入的任何事件都可以被監聽或從記憶體中移除 //以下例子就是監聽與移除記憶體占用,這是as3.0最重要的基礎概念
bt1.addEventListener(MouseEvent.CLICK,bt1_click);
function bt1_click(e:MouseEvent):void{ //觸發的事件內容; }
//該按紐監聽不需要時則remove掉,增加效能 bt1.removeEventListener(MouseEvent.CLICK,bt1_click);

Flash腳本語言

影片控制

語法:gotoAndPlay(Scene,Frame); 將播放頭跳轉到場景中指定的幀並從該幀開始播放,
標籤範例:gotoAndPlay("Scene 1",1);
gotoAndStop:將播放頭跳轉到場景中指定的幀(標籤)並停止播放
NextFrame :下一幀
goto
PreviousFrame:前一幀
nextscene:下一個場景
previousscene :前一個場景
FrameLabel:關鍵幀中定義的標籤位置
語法:on (mouseEvent);
範例:on (press) {
指定觸發動作的滑鼠事件或按鍵
startDrag("");
}
MouseEvent 可分為以下幾類。
Press:滑鼠指針在按鈕上,並按下按鈕
Release:滑鼠指針在按鈕上,按下後放開按鈕
on Release Outside:當滑鼠指針滑到按鈕上時按下滑鼠按鈕,然後在釋放滑鼠按鈕前滑出
此按鈕區域
Roll Over:滑鼠指針滑過按鈕
Roll Out:滑鼠指針滑出按鈕外
Drag Over:當滑鼠指針滑到按鈕上時按下滑鼠按鈕,然後滑出該按鈕區域,接著滑回
到該按鈕上
Drag Out:當滑鼠指針滑到按鈕上時按下滑鼠按鈕,然後滑出此按鈕區域
Key Press:(“key”)按下指定的鍵盤按鍵
play 語法:play(); 開始播放影片或繼續往前播放
stop 語法:stop(); 停止播放影片
stopAllSounds 語法:stopAllSounds; 停止所有正在播放中的音樂檔案

瀏覽器/網路

語法:fscommand (command,parameters); 使SWF 檔案能夠與Flash Player 或
fscommand 嵌入Flash Player 的程式(如 Web 瀏覽器
)進行信息傳遞,範例:fscommand ("fullscreen","true");
續表
Flash Player 的指令。
Fullscreen (true/false):以全螢幕方式打開播放器
Allowscale (true/false):允許影片放大或縮小
Showmenu (true/false):顯示單擊滑鼠右鍵時的選單
Trapallkeys (true/false):傳送所有按鍵事件至onClipEvent
Exec (true/false):執行一項內部指令
Quit:關閉播放器
語法:loadVariables (URL,level/target,Variables);
從外部檔案中讀取數據,例如文本檔案,或是CGI、ASP 或PHP 腳本產生的文本。然後在影片內設定變數值
範例:on(release){
loadVariables loadVariablesNum ("MX.txt",0); }
語法:getURL (URL,Window,Variables);
打開網頁的相對或絕對地址,與超級連結的作用是相同的,可從連結網頁URL 中載入影片、JPG,選擇性地傳遞變數,載入到當前動畫影片中。
getURL 範例:getURL ("(網址)","_blank");
語法:loadMovieNum (URL,level/target,Variables)
loadMovie
範例:loadMovieNum ("picture.jpg",0)
unloadMovie 語法:unloadMovieNum (level/target) 取消已載入的動畫影片

影片剪輯控制

當 SWF 檔案正在播放時,創建一個
影片剪輯的實例。無論播放頭在原始影片剪輯中處於什麼位置,在重複的影片剪輯中,播放頭始終從第 1 幀
開始
語法:duplicateMovieClip (target,new name,depth);
duplicateMovieClip 範例:duplicateMovieClip ("/game","new game",2);
removeMovieClip 語法:removeMovieClip ("target"); 刪除指定的影片剪輯
可用滑鼠拖動已定義實體名稱的影 片剪輯,一次只能拖動一個。一旦 執行,該影片剪輯保持可拖 動狀態,直到用stopDrag 明確停止拖動為止,或是對另一個影片剪輯做 startDrag 的動作命令
語法:startDrag (target,lock,[left,top,right,bottom]);
範例:on (press) { startDrag startDrag
startDrag ("/happy",true,0,350,210);
startDrag 的動作命令
語法:stopDrag ();
範例:on (release)
stopDrag 停止當前的拖動操作
stopDrag ();
續表
語法:onClipEvent (movieEvent) {}
範例:onClipEvent (load) { 事件處理函式:觸發去執行那些指派
gotoAndStop ⑶ 給一個影片剪輯的動作命令
MovieEvent 可分為以下幾類。
Load:載入動畫影片
Unload:刪除動畫影片
onClipEvent EnterFrame:進入每一幀(都會啟動action)
MouseMove:每次移動滑鼠時啟動此動作
MouseDown:按住滑鼠左鍵
MouseUp:放開滑鼠左鍵
KeyDown:按住鍵盤的一個按鍵,使用Key.getCode 去讀取最後被按下的按鍵
KeyUp:放開鍵盤的一個按鍵,使用Key.getCode 去讀取最後被放開的按鍵
Data :在 loadVariables() 或 loadMovie() 動作中接收到數據時啟動該動作。當與
loadVariables() 動作一起指定時,data 事件只在載入最後一個變數時發生一次
當影片播放時,更改影片剪輯的屬
語法:setProperty (target,property,value)
setProperty 性值,如Alpha 、Width、Visible、
範例:setProperty ("happy",_alpha= 30); Rotation 等
在指定的ClipEvent 事件觸發後,刷
updateAfterEvent 語法:updateAfterEvent() 新螢幕顯示,可以避免刷新網頁時的
螢幕閃爍

變數

語法:delete (reference)
範例:account = new Object();
account.balance = 5000;
delete account;
設定變數的值,可運用【運算法】的
方式設定其為字元串或數值。和大多
語法:variable = value 數的程式語言一樣,設定變數名稱
set variable
範例:x= random⒂ + 6; 時,變數名稱的第一個字需為英文而
不能是數字,而在Flash 中變數是沒
有大小寫之分
語法:var variableName
範例:var x;
var y = 1; 聲明變數
var z = 3,w = 4;
var s,t,u = z;
語法:with (object) {statement}
with 範例:with (_root.apple) { 使用with 控制影片剪輯
gotoAndStop ⑶;

判斷條件/循環

語法:break;
範例:var i = 0;
while (true) { 命令Flash 跳過循環體的其餘部分,
if (i >= 100) { 停止循環動作,並執行循環語句之後
break; 的語句
出現在幾種循環類型中,會先跳過循 環里的其餘部分再執行:在while 循環內,會回到循環頂端再
度測試條件。
continue 語法:continue;
在do while 里會到循環底部測試條件。
在for 內,會跳過循環的判斷位置。
在for...in 內,會回到循環頂端,處理
下一個枚舉值
執行語句,然後只要條件為 true,就
do while 語法:do {statement;} while (condition);
計算循環中的條件
當if 語句的條件返回false 時,就執
else 語法:else {statement;}
行要運行的語句
先判斷init (初始值)一次,然後開始
做循環,只要condition (條件)的計
for 語法:for (init; condition; next) {statement}
算結果是true,就執行要運行的語句,
然後再重新判斷
語法:if (condition) {statement;}
範例:if (mx = 5){ 當if 的condition 條件式為true 時,
if
play(); 就執行要運行的語句
}
計算條件,如果條件計算結果為
while 語法:while (condition) {statement;} true,則在循環返回以再次計算條件
之前執行一條語句或一系列語句

列印

列印指定影片剪輯的所有Frame,若 只想列印特定幾頁時,請在要列印的 Frame 加上Frame Lable:#print
語法:print (target,method);
範例:print ("fish","bmovie");
Method 可分為以下3 種:
Bmovie :指明以電影的邊界區域(bounding area)作為列印區域。可以在編寫環境
(authoring)中,在那幾個幀附上標籤:#b。
Bmax:可指定這個混合各個邊界區域的參數,來作為列印範圍。
Bframe:縮放每格的對象大小,來填滿列印的頁面
7.自定義函式
在被調用幀中執行腳本,而不將播放 頭移動到該幀
call 語法:call (frame)
語法:function functionname ([parameters])
{statement }
function 範例:function Circle(radius) { 自定義函式
this.radius = radius;
}
method 語法:object.method = function ([parameters]) { }; 自定義對象的方法
語法:return [expression]; 指定函式返回一個值,如單獨使用
return 範例:function sum (a,b,c) { return 或函式循環執行時,沒有這個
return a + b + c;
命令,則函式返回null
}
8.各種動作
在測試模式下,計算表達式並在
trace 語法:trace (expression); 【輸出】面板中顯示結果,適用於
偵錯
在Actions 中加上批註說明文字,以
語法:// comment 避免Actions 太混雜難以理解,此功
comment
範例:// 這是一個計數器的判斷式 能對於往後的維護工作,甚至是程式
二次開發都相當有幫助
() 範例:gotoAndPlay("Scene 1"1) 範圍
"" 範例:tellTarget("/game") 字元串
1.數學運算符
+ 加
範例:a = 10 ; b = 5
e = a + b // e = 15
- 減
c = a - b // c = 5
* 乘
g = a * b // g = 50
/ 除
h = a/b // h = 2
% A/B 的餘數
i = a % b // i = 0
2.比較運算符
= 等於
範例:a = 50; b = 30; c = 20
< 小於
b < a
> 大於
a > c
<= 小於等於
if (c <= b)
>= 大於等於
if (a >= c)
!= 不等於
if (a != b)
語法:escape(expression)
範例:k = escape("Happy New Year"); 將參數轉換為字元串,並以 URL 編
escape trace(k) 碼格式對其進行編碼
結果:Happy%20New%20Year
語法:eval(expression)
範例:on (release) {
x = “3”; 按照名稱訪問變數、屬性、對象或影
eval
trace (eval (“x”); 片剪輯,返回該變數或屬性的值
}
結果:3
語法:getProperty(instancename,property)
getProperty 返回指定屬性的值
範例:getPrperty(_root.fish,_x)
返回自SWF 檔案開始播放時起已經
getTimer 語法:getTimer()
過的毫秒數
返回一個包含Flash Player 版本與平
台信息的字元串,此函式在
getVersion 語法:getVersion()
Test-movie Mode (測試電影模式)不
會執行
返回一個包含Movie Clip 對象的目
targetPath 語法:targetpath(movieClipObject)
標路徑字元串
語法:unescape(x)
範例:k = unescape("Happy%20 New%20Year"); 將 URL 編碼格式的字元串轉換成
unescape trace(k) ASCⅡ 字元格式
結果:Happy New Year
1.轉換函式
Boolean 語法:Boolean (expression) 轉換指定的參數到布爾值類型
Number 語法:Number (expression) 轉換指定的參數到數字類型
轉換指定的參數到字元串類型
Actions 語法/範例 說明
_alpha
語法:instancename. _alpha=value;
範例:kewpie._alpha=30;
設定影片剪輯的透明值。有效值是0
(全透明)到100(不透明)
_visible
語法:instancename._visible,"boolean";
範例:apple.visible = 1
決定instancename 參數指定的影片
是否看得見
_target 語法:instancename._target 獲取影片剪輯的目標路徑
_rotation
語法:instancename._rotation;
範例:setProperty ("movieclip" _rotation=30);
設定影片剪輯的旋轉角度
_name
語法:instancename._name
範例:setProperty("movieclip" _name,"string");
獲取影片剪輯的實例名稱
_framesloaded
語法:_framesloaded = x;
範例:happy._framesloaded = 25;
確定特定幀及其前面所有幀的內容
是否已經載入,並且是否可在瀏覽
器本地使用。參數:x 為時間軸上的
幀數
_droptarget
語法:myMovieClip._droptarget
範例:if (happy._droptarget == root.trash) {
happy._visible = false;
}
返回該影片剪輯的絕對路徑
_currentframe
語法:_currentframe;
範例:gotoAndStop (_currentframe+5)
結果:引導影片前進 5 格
獲取影片剪輯的當前幀
_totalframes
語法:_totalframes;
範例:if (_currentframe=_totalframes)
獲取影片剪輯的總幀數
_quality 語法:_quality = x;
電影的質量,x 值包括低(low)、
中等(medium)、高(high)或最
好(best)
_focusrect 語法:_focusrect =Boolean 當按Tab 鍵瀏覽時,按鈕上是否有個
黃色的框線出現
_soundbuftime
語法:instancename._soundbuftime
範例:setProperty ("happy "_soundbuftime,"5");
指定在聲音開始進入流之前,預先緩
沖的秒數
_url
語法:instancename._url;
範例:setProperty ("happy" _url,"(網址)"
讀取網址(URL)位置的影片剪輯
String 語法:String (expression) 參數:expression 要被轉換成字元串
的數字、布爾式或表達式
2.數學函式
判斷數據內容是否為數值,如果不是
isNaN 語法:isNaN (expression)
數值則返回true
將字元串轉換為浮點數,直到此函式
parseFloat 語法:parseFloat(string)
遇到不是初始數字一部分的字元
將字元串轉換成整數,並進一步設定
parseInt 語法:parseInt(expression,[radix])
數值的進制
設定影片剪輯的x 坐標,左上角默認
_x 語法:instancename._x
為(0,0)
_y 語法:instancename._y 設定影片剪輯的y 坐標
語法:instancename._xmouse
_xmouse 獲取滑鼠位置的x 坐標
範例:happy._xmouse = 50
語法:instancename._ymouse
_ymouse 獲取滑鼠位置的y 坐標
範例:happy._ymouse = 50;
語法:instancename._xscale 從註冊點開始套用的水平縮放比例,
_xscale
範例:setProperty ("movieclip"_xscale,"70"); 以百分比表示。默認註冊點為(0,0)
語法:instancename._yscale 從註冊點開始套用的垂直縮放比例,
_yscale
範例:setProperty ("movieclip"_yscale,"60"); 以百分比表示。默認註冊點為 (0,0)
語法:instancename._width = value;
_width 設定影片剪輯的寬度
範例:setProperty ("movieclip",_width,"80");
語法:instancename._height= value;
_height 設定影片剪輯的高度
範例:setProperty ("movieclip",_height,"50")
五、對象-核心-Date
Actions 語法/範例 說明
new Date
構造函式
語法:new Date(year,month,date,hour,min,sec,ms);
範例:now = new Date();
trace(now)
結果:Thu Mar 7 16:01:20 GMT+0800 2001
創建Date 對象
getDate
語法:mydate.getdate();
範例:now = new Date();
mydate = now.getDate()
trace (mydate);
按照本地時間返回指定的 Date 對
象中表示月中某天的值(1 到 31 之
間的整數)
getDay
語法:mydate.getday();
範例:now = new Date();
myday = now.getDay()
trace (myday);
按照本地時間返回指定的 Date 對
象中表示周幾的值(0 代表星期日,
1 代表星期一,以此類推)
getFullYear
語法:mydate.getfullyear();
範例:now = new Date();
myfullyear = now.getfullyear()
trace (myfullyear);
按照本地時間返回指定的 Date 對
象中的完整年份值(一個 4 位數,
如2002)
getHours
語法:mydate.gethours();
範例:now = new Date();
myhours = now.gethours()
trace (myhours);
按照本地時間返回指定的 Date 對
象中的小時值(0 到 23 之間的
整數)
getMinutes
語法:mydate.getminutes();
範例:now = new Date();
myminutes = now.getminutes()
trace (myminutes);
按照本地時間返回指定的 Date 對
象中的分鐘值(0 到 59 之間的
整數)
getMonth
語法:mydate.getmonth();
範例:now = new Date();
mymonth = now.getmonth()
trace (mymonth);
按照本地時間返回指定的 Date 對
象中的月份值(0 代表一月,1 代表
二月,以此類推)
getSeconds
語法:mydate.getsecondes();
範例:now = new Date();
myseconds = now.getseconds()
trace (myseconds);
按照本地時間返回指定的 Date 對
象中的秒鐘值(0 到 59 之間的
整數)
toString 語法:mydate.tostring(); 將日期轉換成可讀的字元串值

相關詞條

相關搜尋

熱門詞條

聯絡我們