ActionScript3.0實用教程
ActionScript3.,我們要是會使用它,它能夠幫助我們做什么呢?下面是陽光網小編給大家整理的ActionScript3.0實用教程,供大家參閱!
ActionScript3.0實用教程:使用顯示對象
6.1 顯示對象屬性
屬性表現為對象看得見或看不見的特性。
DisplayObject類的屬性
alpha 指示對象的alpha透明度值
blendMode BlendMode類中的一個值,用于指定要使用的混合模式
filters 包含當前與顯示對象關聯的每個濾鏡對象的索引數組
mask 調用顯示對象被指定的mask對象遮罩
mouseX 指示鼠標對象的x坐標,以像素為單位
mouseY 指示鼠標對象的y坐標,以像素為單位
name 指示DisplayObject的實例名稱
parent 指示包含此顯示對象的DispalyObjectContainer對象
root 對于加載的SWF文件中的顯示對象,root屬性是此SWF文件所表示的顯示列表樹結構部分中的頂級顯示對象
rotation 指示DisplayObject實例距其原始方向的旋轉程度,以度為單位
scaleX 指示從對象注冊點開始應用的對象的水平縮放比例
scaleY 指示從對象注冊點開始應用的對象的垂直縮放比例
stage 顯示對象的舞臺
visible 顯示對象是否可見
width 指示顯示對象的寬度,以像素為單位
x 指示DisplayObject實例相對于父級DisplayObjectContainer本地坐標的x坐標
y 指示DisplayObject實例相對于父級DisplayObjectContainer本地坐標的y坐標
6.1.1 動態定位顯示對象
顯示對象屬性的一個強大功能是可以從一個顯示對象上取得屬性來影響另一個顯示對象的屬性。
6.1.2 位置和注冊點
x,y,scaleX,scaleY,rotation屬性都依靠顯示對象的注冊點。注冊點是顯示對象的(0,0)坐標。對象的注冊點在哪,它的x,y左邊就在哪。注冊點也是對象縮放和旋轉的原點。
6.1.3 使用顯示對象容器來定位一組顯示對象
使用顯示對象容器來分組并定位一組對象是一個完美的方法。例如你可以添加所有的菜單按鈕到一個顯示對象容器的顯示列表中。
6.2 管理對象深度
在flash平臺應用程序中,所有的顯示對象在顯示列表中都位于他們各自的深度上。如有兩個對象彼此重疊,深度高的顯示對象將會在深度低的對象上邊。
在一個應用程序中,當需要使得一個顯示對象在另一個顯示對象的下邊或者上邊時,也許會弄亂對象的深度。這時就需要深度管理了。
深度管理可以有很多種方式。除了在添加一個顯示對象到顯示列表時自動分配,也可以使用DisplayObjectContainer類的方法來整理和改變對象的深度。在應用程序開發方案里都是需要管理顯示對象的
DisplayObjectContainer類的深度管理方法
addChildAt() 將一個DisplayObject實例添加到顯示列表的指定深度索引
getChildAt() 返回位于指定索引處的子顯示對象實例
getChildIndex()返回指定的DisplayObject實例的索引位置
removeChildAt()刪除指定索引位置的DisplayObject實例
setChildIndex() 更改指定的DisplayObject實例的索引位置
swapChildren() 交換兩個指定的DisplayObject實例的索引位置
swapChildrenAt() 通過指定索引位置交換兩個DisplayObject實例
6.3 從顯示列表中移除顯示對象
從顯示列表中刪除顯示對象是管理flash應用程序的很重要的一部分。
無論是創作時還是運行時添加的顯示對象,都可以通過調用DisplayObjectContainer類的removeChild()方法,并指定對象的實例名刪除顯示對象實例。
與從顯示列表中刪除對象一樣重要的是刪除已經被移除的對象運行的代碼和事件監聽器。
ActionScript3.0實用教程:通信和事件
在as中,通信是完全由事件驅動的。as3.0的事件模型允許完全封裝類對象。封裝的意思是類對象僅處理他們自己的內部,與其他類對象的功能沒有聯系。他們做自己的工作并且保持低調。對象需要與外部世界通信時,他們就分發事件。注冊在對象上的監聽器等待分發的事件,并作出相應的動作。
在許多情況下都會觸發事件,這取決于類本身。通過標準的as API處理他們。
7.1 as3.0 事件模型
as3.0事件模型使對象之間的通信簡單、一致。
7.1.1 事件過程細節
處理事件的3個過程如下
事件監聽器聲明 聲明注冊函數來監聽事件
事件分發 當事件在類中發生時,它就會被這個對象分發出去。事件對象被事件傳遞。事件對象包含事件的相關信息。
事件監聽器或處理器 事件監聽器或處理器是擁有一系列代碼的函數,響應函數可以“聽到”的事件。
事件監聽器和事件處理器是相同的意思——是一個監聽事件也是處理事件的函數。
7.1.2 事件分發
所有的類都用從EventDispatcher類繼承的dispatchEvent()方法分發事件,或者實現IEventDispatcher接口。當類中的某件事情發生并且想要分發到應用程序的其他部分讓他們知道這件事情發生了時,就調用dispatchEvent()方法。事件相關的信息和其他需要的參數通過時間對象發送給監聽器。事件的分發者是事件過程的開始。
Event類是所有事件對象的基類。當一個事件被EventDispatcher的方法觸發(例如addEventListener),事件對象都被作為參數傳遞到監聽器函數中。事件對象包含被分發事件的相關數據。Event類有標準的屬性,方法和被大多數類使用的常量。
Event類的屬性
bubbles 布爾值,指示事件是否為冒泡事件
cancelable 指示是否可以阻止與事件相關聯的行為
currentTarget 當前正在使用某個事件監聽器處理事件對象的對象
phase 事件流中的當前階段
target 事件目標
type 分發事件類型
7.1.3 注冊事件監聽器
事件監聽器向對象注冊來監聽對象分發的事件。當一個對象的事件發生時會一直分發事件,無論是否有監聽器為監聽該事件注冊了事件監聽。
監聽器只需要“連接”到對象來“聽”他們的事件。
監聽從對象分發的特定事件是應用程序很重要的功能,例如用戶單擊按鈕(分發mouseDown事件)
每個注冊到對象的監聽器都在監聽一個明確的事件類型。被分發的事件類型表現為一個存儲在靜態類常量中的字符串。常量一般情況下是只讀的、不會改變的并且大寫的。靜態屬性可以被類名直接引用。事件類也存儲事件常量。例如MouseEvent類型可以是mouseDown或MouseEvent.MOUSE_DOWN類型。我們使用事件常量(例如MOUSE_DOWN)而不是字符串(例如mouseDown),是由于as編輯器通常有代碼自
動完成功能,這樣可以避免由于手動輸出事件名出現的拼寫錯誤。
給一個對象添加事件監聽器的語法是以對象名開始,后面接著addEventListener()方法:objectName.addEventListener();
必須給addEventListener()傳遞兩個參數:監聽的事件類型 和 作為事件監聽器監聽事件的函數
7.1.4 事件監聽器
事件監聽器(事件處理器)是注冊到一個對象上,”監聽“一個特定事件類型的函數或方法。
function eventHandler(evt:Event):void{}
通過函數處理函數的參數可以訪問事件的屬性。
使用字符串mouseDown而不使用事件常量MOUSE_DOWN是合法的,但是不推薦。
7.2 使用事件監聽器
在as中事件監聽器是所有通信的管道。分發某個事件,監聽器”聽到“它并處理這個事件。”處理這個事件“,意思是監聽器函數收到了作為參數傳遞來的事件對象,并執行了函數中包含的代碼。
7.2.1 事件類
flash.events.Event類處理大多數在as API中的一般的事件。例如在運行時每次往舞臺上添加顯示對象都分發addedToStage事件。
var s:Sprite = new Sprite();
s.addEventListener(Event.ADDED_TO_STAGE, spriteAddedHandler);
function spriteAddedHandler(e:Event):void {
trace("helo")
}
function spriteRemovedHandler(e:Event):void {
trace("lhls")
}
addChild(s);
removeChild(s)
一個對象可以添加多個事件監聽器(例如,同一個對象給不同監聽器分發不同的事件類型)。多個對象也能與同一個事件監聽器有關(例如,一個一般的事件監聽器可以識別分發了那個事件類型,以及
分發的對象來源)
7.2.2 使用事件對象
通過調用傳遞到事件監聽器中的參數,可以訪問事件對象。
一個很好的習慣是:在一個事件處理函數中處理多個事件類型而不是為每一個事件類型都單獨創建一個處理函數。
7.2.3 MouseEvent類
一些類對象需要分發額外的、Event類本身無法滿足的'對象,這樣就需要一個”增強型“的事件對象。這些”增強型“的事件對象繼承自Event類,且包括更多的事件類型和屬性。
MouseEvent:鼠標事件
鼠標單擊事件:適用于影片剪輯、按鈕、舞臺。(PS:Button.buttonMode=true;鼠標變成手型)
鼠標移入事件:MOUSE_OVER
鼠標移出事件:MOUSE_OUT
鼠標雙擊事件:DOUBLE_CLICK(PS:使用雙擊事件還要加上一句:Button.doubleClickEnabled=true,表示是否接收雙擊事件)
鼠標滾輪事件:MOUSE_WHEEL(鼠標要移動到對象上,才起作用)
7.2.4 在一個事件處理器中檢查多個事件類型
任何有經驗的程序員都有一個共同的習慣:就是盡可能寫最小的代碼。在事件處理器中可以很好地簡化代碼,通過判斷事件對象的type屬性可以決定做出相應的動作。
使用if條件語句在一個事件處理器中匹配MouseEvent類型。
7.2.5 KyeboardEvent類
為了在應用程序的全局范圍內監聽鍵盤事件,可以在舞臺上注冊監聽器:stage.addEventListener()監聽器之后就可以監聽到KEY_DOWN和KEY_UP事件并調用它們相應的事件處理器了。
為了檢測并響應鍵盤的單擊事件,必須聲明KeyboardEvent的事件監聽器。組合鍵(例如ctrl alt shift)和其他任何鍵都可以被檢測。
KeyboardEvent屬性
charCode 包含按下或釋放的鍵的字符代碼值
keyCode 按下或釋放的鍵的鍵控代碼值
keyLocation 指示鍵在鍵盤上的位置
ctrlKey 指示ctrl鍵是否出于活動狀態(true),還是非活動狀態(false)
altKey 指示alt鍵是否出于活動狀態(true),還是非活動狀態(false)
shiftKey 指示shift是否出于活動狀態(true),還是非活動狀態(false)
在as中,識別鍵盤是通過檢測當前鍵盤上單擊的keyCode值并與標準的鍵值做匹配來完成。
直接在flash IDE里也許不會允許在播放器中注冊所有鍵盤事件,這是因為flash IDE本身也許捕獲了他們作為鍵盤快捷鍵,進而阻礙了flash player
KeyboardEvent:鍵盤事件
鍵盤按下事件:KEY_DOWN
鍵盤松開事件:KEY_UP
鍵盤按鍵的值:KeyboardEvent.keyCode,可以通過此屬性獲取按鍵的值
按鍵控制:鍵盤四個方向鍵對應的數值:←:37,↑:38,→:39,↓:40,空格:32
7.2.6 刪除事件監聽器
與給對象添加事件監聽器同樣重要的是從舞臺上刪除事件監聽器,或不再需要監聽這個對象的事件時將其刪除。既是一個對象已經不再需要,如果不刪除它的事件監聽器,他們仍然會消耗資源。
刪除事件監聽器的第一步是調用分發者對象,第二步是調用removeEventListener()方法,最后作為參數指定事件類型和事件監聽器:objectName.removeEventListener(EventClass.EVENT_TYPE,eventHandler);
7.3 事件流
在as3.0中,事件流主要用于MouseEvent和KeyboardEvent對象。例如,從一個按鈕分發的MouseEvent事件,其實并不只是從按鈕本身分發的,而是從按鈕所在的父顯示對象容器分發的。
如果你有一個MovieClip容器包含了一系列按鈕的時候,這是很有用的。只要給容器本身注冊一個事件監聽器。你可以通過在過程中引用MouseEvent對象的target和currentTarget屬性證實是否MovieClip容器中的按鈕被單擊了。
事件流發生在3個階段。
捕獲階段:事件從舞臺開始并按照他的路線通過所有的顯示對象直到達到事件起源的對象。
目標階段:事件從目標對象開始分發。
冒泡階段:當事件對象被創建時如果冒泡事件被設置的話。事件過程冒泡返回通過所有的父顯示對象容器直到再次到達舞臺。
捕獲階段和冒泡階段的不同反映了你是否想要事件在捕獲階段走下跌的路線或在目標階段后走回升的路線。如果你想要使用捕獲階段,在事件處理函數中的事件對象之后再添加useCapture參數為true:function evetnHandler(evt:EventObject,useCapture=true)
默認情況下,useCapture是被設置為false的,并且事件只在目標和冒泡階段被處理。
想要使用事件流,用事件對象的target和currentTarget屬性。MovieClip(event.target)/MovieClip(event.currentTarget)
currentTarget屬性永遠是指向事件監聽器注冊的對象。target屬性是在事件流中的當前目標。
例如,名為button1的按鈕存在于名為buttonContainer的影片剪輯的顯示列表中,名為clickHandler的MOUSE_DOWN事件監聽器函數注冊在buttonContainer上,如果鼠標點在button1的上邊,buttonContainer被單擊時,MouseEventd對象的currentTarget屬性將返回buttonContainer,target屬性將會返回button1
PS:在某些需要在事件到達對象前攔截的情況下,或者代碼需要在冒泡階段執行的一些復雜組件交互案例中,使用冒泡與捕獲階段是很有用的。盡管事件流很有用,但在某些你覺得有可能出錯的鼠標交互里可以不必使用它。
7.4 Evetn類的子類
Event類的子類
ColorPickerEvent 與ColorPciker相關的事件對象
FocusEvent 當一個對象的焦點轉變到另外一個對象時使用的事件對象
KeyboardEvent 通過鍵盤輸入的事件對象
MetadataEvent 當接收到FLV視頻文件的元數據信息包時使用的事件對象
MotionEvent 由fl.motion.Animator類分發的事件對象
MouseEvent 當鼠標事件發生時分發的事件對象
NetStatusEvent 當NetConnection NetStream SharedObject類的狀態改變時分發的事件對象
ProgressEvent 當一個加載對象開始加載之后有規律地分發的事件對象
SoundEvent 當Sound對象的設置改變時分發的事件對象
TextEvent 當與TextField互動或者改變時分發的事件對象
TimerEvent 當Timer對象的每個時間間隔完成時分發的事件對象
TweenEvent 由fl.transitions.Tween類分發的事件對象
VideoEvent 當視頻狀態改變時分發的事件對象
ActionScript3.0實用教程:控制時間軸
8.1 控制時間軸
用于控制時間軸的MovieClip方法
gotoAndPlay() 跳轉至指定的幀然后開始播放時間軸
gotoAndStop() 跳轉至指定的幀然后停止
nextFrame() 跳轉至下一幀
prevFrame() 跳轉至上一幀
play() 從當前幀開始播放
stop() 在當前幀停止播放
【停止影片:1.stop(),2.事件監聽】
使用幀標簽
幀標簽只可以指定給關鍵幀。幀標簽不可以含有空格,也不可以以數字開頭。
影片剪輯按鈕(仍是影片剪輯)與按鈕元相似,但卻是創建有以下特征按鈕的基礎:
完全動畫的
可充用的
包含其他顯示對象
按鈕元件本身除了基本的鼠標事件是沒有太多其他功能的。一個影片剪輯的按鈕有完整的時間軸并在其時間軸中完全支持as驅動,這樣可以制作高級交互和特效。
PS:在第某幀插入一幀,這樣時間軸就得到了繼承。如果時間軸上沒有什么改變,那關鍵幀就不是必需的。應該只有在時間軸引入改變時才使用關鍵幀。因為即使他們沒有任何內容也會比普通幀占去更多資源。如果希望在時間軸上創建空隙,那么你應該使用普通幀。
給影片剪輯的時間軸中嵌入as代碼是給影片剪輯封裝功能。這樣可以重用這個影片剪輯而不用寫額外的代碼。
8.2 使用目標路徑導航時間軸
在應用程序中給你的顯示對象和嵌套顯示對象和它們的層級畫一個線框圖是個很好的主意。這樣會給你一個怎樣用as找到顯示對象并且告訴它們去做什么的清晰路線。
絕對目標路徑和相對目標路徑
如果想要從任何其他顯示對象時間軸中調用舞臺,你可以有兩種方式調用它:使用一個絕對路徑或相對路徑。
從時間軸經過絕對路徑調用舞臺需要調用root時間軸(舞臺本身)使用root標識符。想要聲明root作為一個顯示對象并且從任何其他顯示對象內部的時間軸調用root,代碼如下:var myRoot:MovieClip=root as MovieClip;
myRoot.doSomething();
基本上將root返回的對象作為顯示對象,是沒有任何影片剪輯屬性的,所以我們需要將它重新轉型為有用的影片剪輯。
stage或root也是某一顯示對象的時間軸,要從該顯示對象的時間軸通過相對路徑調用舞臺,代碼如下:var myParent:MovieClip=this.parent as MovieClip;
myParent.doSomething();
或者 MovieClip(thi.parent).doSomething();
無論哪種方式,要通過相對路徑調用顯示對象的父級,都需要告訴flash,該顯示對象的父級是一個MovieClip對象。
8.3 在運行時定義幀頻
在運行時設置幀頻是as3.0的新特性?梢杂盟鼇碜杂煽刂瞥绦虻乃俾。緩慢的幀頻性能表現出色,但是在平滑的動畫中會顯得很笨重。而快速的幀頻擁有平滑的動畫和視覺效果,同時也導致了性能下降,進而導致了舞臺上的視覺項渲染速度降低。
使用stage類的frameRate屬性,改變幀頻以改變動畫的速度。
場景跳轉:打開場景面板:shift+F2
gotoAndStop(2,"次場景");
gotoAndPlay(2,"次場景");
prevScene():前一場景
nextScene():后一場景
獲取播放頭位置:currentFrame
獲取總幀數:totalFrames,可用于場景與影片剪輯。
回放:使用ENTER_FRAME事件
if(this.currentFrame==1){this.gotoAndStop(this.totalFrames)}
else{this.preFrame();}
加載庫中的元件:var 元件名:元件=new 元件();
addChild(元件名);
添加多個元件:stage.stageWidth/10*i
f_mc.y=(f_mc.y+f_mc.height)*i
Math.random();
拖動對象:var fw=new Rectangle(0,10,0,0)
MOUSE_DOWN startDrag(false,fw)
MOUSE_UP stopDrag()
MouseEvent.ROLL_OUT 當鼠標移出對象時
【ActionScript3.0實用教程】相關文章: