快訊!我的新書今天開始可以在天瓏網路書店預購啦!歡迎大家前往訂購!
>>>> AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題 <<<<

Flash

  • , ,

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

    本文為看這篇文章之後的重點整理: http://www.adobe.com/devnet/flash/articles/efficiency-tips.html 這篇文章同時會對Flash開發程式師、動畫及美術有幫助。 提升效能 關掉沒有用到的物件的互動功能: 減少畫面中active的物件能有效的增加效能,下面這段CODE可以關閉掉MovieClip和其他物件的所有互動關係。 如果仍要與其他的元件做互動則使用mouseChildren = false;就好。 判斷何時該用點陣圖(Bitmap)何時該用形狀(Shape): 使用Bitmap:當今天圖片有許多漸層、複雜圖案、顏色很多時,用Bitmap較好。 使用Shape:當今天的圖片是大塊色塊組成,感覺不利於縮放、但卻不需要縮放時,則使用Shape。(點陣圖按CTRL+B) 將線段轉成色塊:線段所需要耗用的效能較多,因此可將不必要的線段轉換為填色。(在修改>形狀>將線段轉換成填色) 避免使用虛線或點線,因為此種線段很耗費效能。 避免使用圓角,圓角比起直角的處理上耗效能。 避免圖像的坐標坐落位置帶有小數點,因為小數點的運算比起整數會耗費更多效能。 向量圖形最佳化 減少圖形中的節點(按修改>圖像>最佳化),或使用平滑工具來減少節點。 避免使用漸層:漸層是非常耗效能的,若是必需要使用漸層,可在完成後,將其轉為Bitmap格式,或者以純色去取代。 不要使用不必要大小的bitmap圖片,或多餘的aplha值=0的透明色塊。因為這樣會增加所耗費的效能。 避免使用遮罩:使用遮罩時,每次進入下一個影格都會重新繪製並產生裡面的元件,因此會耗費大量的效能。所以我們要盡量避免使用遮罩功能,若真的有需要,可以改用程式裡的scrollRect功能來取代遮罩,這樣在實務上會省下許多的資源,缺點是只能做方形遮罩。 靜態物件避免使用濾鏡特效:因為濾鏡特效是每次重繪時都要重新計算一次特效顯示的值,若是今天是靜態物件要做濾鏡效果,可先在PHOTOSHOP內做好,便可節省濾鏡特效的運算時間。 將陰影效果的品質調低 假如圖片要resize,不要直接在flash裡改變圖片大小,而應該在外部先做好resize再loading進來。可以使用mipmapping 來計算圖片的最佳大小。…

  • , ,

    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時,也可以先指定事件是否要完整的跑完全部的流程。 宣告事件的語法及及參數意義如下: 參數說明(官方文件) type:String是要發送的事件的識別名稱EX:Event.COMPLETE bubbles:Boolean預設值是false,這個值是用來設定是否要有冒泡階段,如果傳false,代表他不會跑完全部的流程,只會從Capture到target階段就停止。 cancelable:Boolean預設值是false,這個值是用來設定是否這個事件可以被event.preventDefault();取消,如果設定為true的話,代表此事件是可以被取消的(稍候在dispatchEvent會更詳述這部份)。 常用的可以取消的事件有(cancelable為true):   FocusEvent.MOUSE_FOCUS_CHANGE、FocusEvent.KEY_FOCUS_CHANGE、TextEvent.TEXT_INPUT。 而發送事件則是用這一段程式碼: 在發送事件時,要注意,假使今天我們是在STAGE裡面有一個box物件,那當我們用box.dispatchEvent(event); 即使事件是用box發送的,事件還是會從stage > root > box這樣跑。(請見上圖) 假如在建立Event時,bubbles設為true,那在上圖跑的流程為stage >…

  • ,

    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時用AS指定元件abc,當影格跑到影格5時,畫面上所顯示的元件也會與影格1的元件不同(若沒關鍵影格的狀況下則會是相同的)。 效能相關: 形狀或顏色漸變,是每進入一次影格,便會整個圖層做重繪。因此他的漸變對象不能為元件,而需要是向量圖形。(耗效能) 傳統移動漸變,則是單純對元件的位置或大小做改變,元件本身不會重繪。因此對象一定要是元件。 重繪效能會與重繪區域大小有關,最耗效能的為向量漸層或色塊,因此若無必要,盡可能將元件改使用bitmap點陣形式。 flv動畫在初始載入時會較花效能,但若是畫面上同時有多個動畫,則flv會較省效能。

  • 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);…

  • 初探OSMF的plugs-in開發

    這篇文章是我看完下面的網頁後,所寫的中文心得: http://osmf.org/dev/osmf/OtherPDFs/osmf_plugin_dev_guide.pdf 建立一個plug-in的方式 1. 建立一個PluginInfo物件,並且寫一個下面的函數讓OSMF去取得PluginInfo的物件 2. 建立一個物件繼承PluginInfo,然後建立一個Vector.執行super(items) ps: 在建立MediaFactoryItem時會傳入三個參數 第一個參數是一串string,這個MediaFactoryItem的id 第二個參數是一個函數,當有任何資源被指定給MediaFactory.createMediaElement時,這函數會被呼叫, 傳入被指定的資源,回傳一個布林值代表是否要呼叫第三個參數所傳入的函數 第三個參數也是一個函數,當有任何資源被指定給MediaFactory.createMediaElement且第二個參數傳回的值為true時會被呼叫 不會傳入東西,然後要傳回一個MediaElement 那建立plugin的方式有兩種: 1. 靜態建立(把plugin用includes進src裡或加進lib庫裡的方式去呼叫) 2. 動態建立(把plugin用載入swf檔的方式去呼叫) 下載osmf的資料夾裡面有一個sample,裡面有許多plugin的範例 可以研究其使用方式 Plug-in 種類有三種 1. Standard…

  • OSMF簡介

    OSMF是一個開源且免費的Action Script框架,用以建置多媒體播放器。 現今的播放器很多時候不止是播放器,它們可能需要連接至CDN、呈現廣告、補捉使用者事件給伺服器分析、在使用者介面上提供社交功能等…。每個功能可能都會需要該方面的專業人士去專門開發,而OSMF就是為了解決這個狀況,降低開發成本而產生的,在OSMF裡,開發人員所開發的播放器,可以透過一套標準的API,與第三方所開發的plug-in功能整合。 簡單來說,可能今天我的播放器想要與聊天功能整合、或特定事件引發特定廣告,我們可以用OSMF所提供的標準API去開發相關功能,第三方程式不需要關心播放器相關議題,只需透過OSMF所提供的API來做,以提高程式的重用性。 OSMF的開發核心思想是『hooks』,每一個插件都是可被動態加載的功能,可被宣告為動態或靜態載入。靜態載入是指編譯時就被編譯進去、而動態載入則是在播放時再動態載入SWF插件。 Plug-ins分成可視與非可視的元件,可視元件可在載入swf時覆蓋原本的使用者介面(或一個暫停按鈕),非可視元件可將使用者操作紀錄和分析資料傳送給分析伺服器。 在OSMF裡,plug-in是declarative(宣告性)的。plug-in的功能是經由OSMF的API去做宣告,framework只負責檢查插件的功能,然後建立插件與媒體播放器之間的關係。plug-in無法直接存取任何播放器的內容,而OSMF則是扮演著plug-in和media player之間的溝通者。這可以確定播放器和插件之間的溝通是有標準化的。 MediaFactory是處理media和plug-in之間的溝通者,開發player的developer用MediaFactory去載入plug-in並產生MediaElements。雖然我們也可以直接創建MediaElements,但使用MediaFactory產生的MediaElements可讓我們用載入的插件影響原來的輸出結果。

  • OSMF相關資源

    介紹 OSMF第一步 Open Source Media Framework中文介紹 開源媒體框架(OSMF)的介紹和概況:上 [譯] Open Source Media Framework – Plug-in Developer’s Guide Open Source Media Framework Developer’s Guide 簡報 Almer Blank…

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

    補充:這個方法只可以在flash player的debugger版本可用, 因為在一般非debugger的player無法用”e.getStackTrace()”來抓取歷史資訊 再補充:非debugger的版本只需在flex的compiler arguments裡加上 這串參數,就會可以正確的取得”e.getStackTrace()”的值了! 如果我們在某個函數兩要知道有關傳進的參數的相關資訊 可以使用arguments去取得 下面網址有介紹arguments的使用方式 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/arguments.html 但是過去在as2裡,arguments可以用caller去知道呼叫此函數的地方 在as3裡,卻將此一屬性拿掉了。 那我們在as3裡該如何知道是誰呼叫了這個函數呢? 我在一個別人的部落格裡找到一個別人寫好的解法 是先丟出一個錯誤訊息,然後去getStackTrace(),再去解析之前呼叫者的資訊 原始部落格在此 Looking up the calling function 原始碼如下:

  • 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 =…

  • , ,

    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)時 文字就會呈現傳統的中文直式書寫方式呈現 下面的是將文字改為直式文字的範例程式


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!