在‘Action Script3’分類底下的文章

hasEventListener()與willTrigger()區別

承上一篇介紹Event事件流的基本概念 AS3的事件傳遞機制(Event、dispatchEvent及addEventListener) 再來介紹相關的檢查函數。 hasEventListener()方法: 檢查 EventDispatcher 對象是否為有註冊這個事件的監聽器。 willTrigger()方法: 檢查是否用此 EventDispatcher 對象或其父容器是否有註冊這個事件的監聽器 hasEventListener() 與 willTrigger()的區別是:hasEventListener() 只檢查它所屬的對象 而 willTrigger() 檢查對象以及對象的父容器是否有註冊這個事件(不管capture的值)。 假如像下面這樣的物件階層來說 今天我們對stage註冊事件 stage.addEventListener(MouseEvent.CLICK, stageClick); 則檢查box的willTrigger及hasEventListener trace(box.willTrigger(MouseEvent.CLICK)); trace(box.hasEve […]

繼續閱讀...

提升Flash效能的幾個注意事項

本文為看這篇文章之後的重點整理: http://www.adobe.com/devnet/flash/articles/efficiency-tips.html 這篇文章同時會對Flash開發程式師、動畫及美術有幫助。 提升效能 關掉沒有用到的物件的互動功能: 減少畫面中active的物件能有效的增加效能,下面這段CODE可以關閉掉MovieClip和其他物件的所有互動關係。 mouseEnabled = false; mouseChildren = false; 如果仍要與其他的元件做互動則使用mouseChildren = false;就好。 判斷何時該用點陣圖(Bitmap)何時該用形狀(Shape): 使用Bitmap:當今天圖片有許多漸層、複雜圖案、顏色很多時,用Bitmap較好。 使用Shape:當今天的圖片是大塊色塊組成,感覺不利於縮放、但卻不需要縮放時,則使用Shape。(點陣圖按CTRL+B) 將線段轉成色塊:線段所需要耗用的效能較多,因此可將不必要的線段轉換為填色。(在修改>形狀>將線段轉換成填色) 避免使用虛線或點線,因為此種線段很耗費效能。 避免使用 […]

繼續閱讀...

AS3的事件傳遞機制(Event、dispatchEvent及addEventListener)

當事件被發送出來之後。Event一般來説都會有一個Flow。 Flow分三個部分: Capture(捕獲階段) Targeting(目標階段) Bubbling(冒泡階段) 其關係圖如下:(來源為http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html) 值得一提的是,在FLASH裡,只有和UI相關的物件,會有上圖所示的目標及補獲階段的事件流, 一般像是Timer、Loader事件,是直接進入目標階段,並不會有上圖所示的事件流的流程。 在宣告Event時,也可以先指定事件是否要完整的跑完全部的流程。 宣告事件的語法及及參數意義如下: var event:Event = new Event(type, bubbles, cancelable); 參數說明(官方文件) type:String是要發送的事件的識別名稱EX:Event.COMPLETE bubbles:Boolean預設值是false,這個值是用來設定是否要有冒泡階段,如果傳false,代表他不會跑完全部的流程,只會從Capture到ta […]

繼續閱讀...

Flash時間軸運作相關注意點

遮罩相關: 當圖層在遮罩之下時,影格每次前進,所有的物件都會重新運算並重新產生 若有一個動態label在遮罩之下,若其原本的顯示的文字為”舊的值“,在影格1時,用script將其值設為”新的值“,當影格前進到下一個影格時,又會變回顯示”舊的值“(沒有關鍵影格也是)。 同理,如果我們在影格1時,在as裡指定某個MovieClip,當進入下一個影格時,原本在as指定的MovieClip會與當下畫面上的物件不同,而造成無法對其做操作的狀況,這時候應該要到某定點影格時,再在as裡對物件做指定的動作。 關鍵影格相關: 每次重新經過一個關鍵影格,其物件都會重新產生。 若在影格1裡,有元件a b c,然後在影格2裡,有元件d e。當我們用as,在影格1裡指定a b c元件至某個變數裡,當時間軸跑到影格2,再跑回影格1。原本指定的變數裡面所存的影格,會是上一次影格1裡的元件,但會與現在在畫面上影格1顯示的元件不同。 若某MovieClip的第1影格和第5影格都是關鍵影格,在關鍵影格上的都有同樣的元件a b c。若我們在影格1時用A […]

繼續閱讀...

AS3.0小數運算BUG

今天處理帶錢問題時,發現AS3的Number相減的一個問題 討論串如下 http://zengrong.net/post/1186.htm http://blog.csdn.net/bill1315/article/details/8574109 因此在撰寫程式時, 應盡量避免直接將兩個帶小數點的NUMBER做運算 而應該以整數型態做運算,運算完後再做小數點的位移 或許對一些人而言這是已知的事 但還是希望能夠分享一些自己曾遇到的錯誤以避免大家再發生相同問題~ 看下面的代碼: 1 2 3 4 var n1:Number = 0.7; var n2:Number = 0.4; trace(n1 – n2); //輸出 0.29999999999999993 簡單說,就是兩個一位小數相減,差為何不是一位小數? 經測試,乘法也有同樣的問題。 GOOGLE找到了Flex團隊的一個回覆:http://old.nabble.com/Float-number-calculation-in-AS3-td18447329.html 從回覆看,AS3的Number與JAVA或C++的double類似,採用二 […]

繼續閱讀...

在as3裡取得函數呼叫者資訊

補充:這個方法只可以在flash player的debugger版本可用, 因為在一般非debugger的player無法用”e.getStackTrace()”來抓取歷史資訊 再補充:非debugger的版本只需在flex的compiler arguments裡加上 -swf-version=18 這串參數,就會可以正確的取得”e.getStackTrace()”的值了! 如果我們在某個函數兩要知道有關傳進的參數的相關資訊 可以使用arguments去取得 下面網址有介紹arguments的使用方式 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/arguments.html package { import flash.display.Sprite; public class ArgumentsExample extends Sprite { public function ArgumentsExample() { println(“Hello Wo […]

繼續閱讀...

AS3.0中三角函數的使用

先用Math.atan2()去求得圓的弧度 用法是弧度 = Math.atan2(x,y) x與y指的是在坐標軸上形成三角型的那個點的x,y 然後再用弧度轉角度的公式去求出角度 //弧度轉角度 var arc:Number=1 //弧度 var angle=(arc*180)/Math.PI; //角度 //角度轉弧度 var angle:Number=30 //角度 var arc=angle/180*Math.PI; //弧度 另外Math.sin、Math.cos裡面要傳入的值,則是弧度 所以若我們要算sin60的值,需要這樣去代入 Math.sin(60*Math.PI/180); 那sin = 對邊/斜邊 所以要求出對邊就是 Math.sin(60*Math.PI/180) * 斜邊 其他的亦同。 語法結構: Math.sin(數值或表達式); Math.cos(數值或表達式); Math.tan(數值或表達式); Math.asin(數值或表達式); Math.acos(數值或表達式); Math.atan(數值或表達式); Math.atan2(數值或表達式); 註:數值 […]

繼續閱讀...

AS3.0中製作直式書寫的方式

在as3.0中有 FTE可針對文字去測量其寬度、高度等 針對個別的文字去做處理 相關官網的說明可見此 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS6C0BB8ED-2805-467a-9C71-F9D757F33FB6.html ElementFormat是定義文字的相關屬性(字型、大小、顏色等等) 然後再new一個TextElement設定文字格式和文字內容 再將其放到一個TextBlock裡面 TextBlock裡面則有許多相關的操作函數 可以對個別的文字做旋轉、定位等等 http://livedocs.adobe.com/flex/3_cn/langref/flash/text/engine/TextBlock.html 詳細的手冊說明在上面 裡面的lineRotation將角度設為九十度(TextRotation.ROTATE_90)時 文字就會呈現傳統的中文直式書寫方式呈現 下面的是將文字改為直式文字的範例程式 package { import flash.display.Sprite; impo […]

繼續閱讀...

如何在flex4裡自製resize事件

首先resize事件是針對該元件大小被縮放時才會產生 所以要在根元件去監聽resize的事件 很必需注意的一點,是flex4的spark元件預設會自動無視超出範圍大小的東西 因此會發現當我們把視窗縮小時, 因為超出的大小被無視了 無法偵聽到resize事件 這時候我們要在根容器上加上 clipAndEnableScrolling=”true”屬性 這個屬性主要是告訴我們要不要自動無視超出的範圍 group的預設值是false 也就是無視他 因此我們要先將 clipAndEnableScrolling設定為true 才可以偵聽到縮小視窗的事件

繼續閱讀...

繪出圓弧

最近在試著把12個按鈕排成圓弧狀 下面是我找的一些有關於三角函數的資料 http://edscb.blogspot.com/2008/03/blog-post.html http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=53846 在as裡使用sin和cos函數都是輸入弧度 因此要先將角度用角度與弧度的轉換: radians = degrees * Math.PI / 180 degrees = radians *180 / Math.PI 去轉換後再傳進去,才可獲得正確的值 以下類別是我寫的排列函數 傳進的參數為 範例: ArrangeTool.getInstance().drawArc(100,500,100,400,canvasContent); //弧形開端、弧形結束端、水平y座標、半徑、存放要排列的物件的陣列 類別內容: package com.demo { import flash.geom.Point; public final class ArrangeTool { private stati […]

繼續閱讀...