跳到主要內容

發表文章

目前顯示的是有「FLASHAS3」標籤的文章

2013新書 設計職人必修:用 Flash 輕鬆打造 iPhone / Android 手機 App

呼,小弟的第二本 Flash 書 設計職人必修:用 Flash 輕鬆打造 iPhone / Android 手機 App 教你使用 Flash 來開發 iPhone / Android 的應用程式 範例搶先看:可以下載 Android / iOS 的完成檔 http://milkmidi.com/2013book/ 博客來書籍館的介紹: http://www.books.com.tw/exep/prod/lookinside.php?item=0010579967 筆者會將發現的錯誤記錄在這篇,如果大家有發現其他的問題也麻煩跟小弟說一下 感謝大家 問題回報:

設計職人必修, 用 Flash 輕鬆打造 iPhone, Android 手機 App

是的,各位奶粉們,小弟的第二本書 "設計職人必修, 用 Flash 輕鬆打造 iPhone, Android 手機 App" 即將上市啦, 滿滿的精采範例,  熱血的程度就像中日棒球之戰一樣, 搶購的熱潮就像反核活動一樣(明明就還沒上市)。 特別預留 2 本給奶粉們。 活動時間:現在開始到小弟拿到書為止。 活動玩法:以 "書名任意一詞" 來造句。 例:我愛 Flash(有出現 Flash)。 例:核四的問題是每位職人必修的課題(有出現 職人必修)。 小弟將選出最有創意的二名得主。(創意創意,千萬不要抄襲) 創意沒有好壞,一切以我自己來主觀判斷(對,我就是裁判) 抱歉補充一下:因為書的運費關系,限台灣地區的朋友參加 範例搶先看 http://milkmidi.com/2013Book/?s=blogger 想第一手拿到書的奶粉們,可以到筆者的粉絲團 https://www.facebook.com/milkmidifans

2013 Adobe AIR Mobile 跨平台行動裝置開發班

2013 Adobe AIR Mobile 跨平台行動裝置開發班 是的,小弟精心準備的行動裝置課程 應用程式的戰場已從桌機漫延至行動裝置, 這中間經歷過 iOS 公開表示不會支援 Flash Player, 而 Adobe 也宣佈放棄 Android 平台的 Flash Player, 看似 Flash 的時代好像結束了, 其實不然, Flash 在桌機平台上還是保有優勢, 近來加入的硬體加速功能 ( Stage3D, StageVideo ), 及多執行序工作 ( Worker ) , 更讓 Flash 在效能上大大的提升, 更能讓創意的點子不在受限於以往的效能而無法完美的發揮。 Flash 在行動裝置上多了 Adobe AIR 的包裝, 把各平台上的向容性問題降到最低, 省去許多測試的時間, 開發上也是用熟悉的軟體與語言, 節省人力成本與工時, 面對這麼競爭的 App 市場, Flash 還是最佳的開發選擇。 本課程是針對智慧型手機 iPhone 和 Android 所量身定做的程式開發課程 使用 Adobe Flash 透過 AIR SDK, 編譯到各行動裝置平台。 學員需自備一隻行動裝置以方便開發測試, 二選一即可: 1. Android 請先確定您的裝置可以安裝 Adobe AIR https://play.google.com/store/apps/details?id=com.adobe.air 2. iOS iPhone4 或 iPad2 以上的裝置 需先成為 iOS 開發者, 並在 Mac 上取得 p12 憑證 可以參考梅干桑老師的教學, 如何製作 iOS 開發者憑證 http://www.minwt.com/ios/4411.html 課堂上請攜帶轉好的 p12 憑證。 如果你的機子 JB 過的話就不需要以上步驟 報名網址: http://www.flycan.com.tw/course/Adobe-AIR-Mobile.php

trace 進化版

大家好,我是奶綠茶 在開發任何程式語言時, 輸出的資訊是非常重要的 在 AS 裡使用 trace 來輸出 但預設就只會輸出文字 想要得到在那個類別下的函式執行的 可以透過以下的方法。 package { public function mTrace( ... args ):void { var e:Error = new Error(); var caller:String = "[" + e.getStackTrace().match( /[\w\/]*\(\)/g )[ 1 ] + "]"; trace( caller, args ); } } 接著就可以使用 mTrace("我是奶伯伯"); 就會得到像這樣的資訊 [CateringMain/init()] [object CateringMain] 轉載請註明出處

FP11.4 Worker 多執行序

大家期待以久的 Flash 多執行序來了(還是只有我在期待) 在之前 Flash 只要有程式塞住, 就會整個像死檔一樣的掛掉 現在多了執行序的幫忙, 可以把較吃效能的動做交由背景來除理 這樣就不會影響本來的動畫 筆者寫的 Demo 就是用 Sound 類別的 extract, 把整首 mp3 轉成 ByteArray , 好來製作加速播放功能,之前在轉換的過程,會整個卡住 用了 Worker 多執行序就可決解這樣的問題 線上 Demo, 請確定你的  FlashPlayer 為 11.4 以上的版本才看的到 https://dl.dropbox.com/u/2069696/blog/index.html?s=2012_10_09_FP11_Worker/worker 轉載請註明出處 /** * @author milkmidi */ package { import com.bit101.components.HUISlider; import com.bit101.components.PushButton; import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.SampleDataEvent; import flash.media.Sound; import flash.system.MessageChannel; import flash.system.Worker; import flash.system.WorkerDomain; import flash.text.TextField; import flash.utils.ByteArray; import net.hires.debug.Stats; import swc.milkmidi.Intro_mc; public class LoadSoundExtract extends Sprite { static public const BYTES_PER_CALLBACK:int = 4096; private var samplesData:...

Flash AS3 阻檔 Event 事件

設計有個元件 box 偵聽 CLICK 事件 而 stage 也偵聽 CLICK 事件 當點擊 box 時,二個事件都會發生 如果要避免這樣的問題 解法很簡單,只要使用 Event 裡的 stopPropagation() 就可以中斷之後的事件, 這樣 stage 就不會接收到 package { import flash.display.Sprite; import flash.events.MouseEvent; public class EventTest extends Sprite{ public function EventTest() { var box:Sprite = new Sprite; box.graphics.beginFill(0xff0000); box.graphics.drawRect(0, 0, 50, 50); box.graphics.endFill(); box.addEventListener(MouseEvent.CLICK , onBoxClickHandler); addChild( box ); stage.addEventListener(MouseEvent.CLICK , onStageClickHandler); } private function onBoxClickHandler(e:MouseEvent):void { e.stopPropagation(); trace("onBox Click"); } private function onStageClickHandler(e:MouseEvent):void { trace("stage Click"); } } }

Flare3D SwitchColorFilter

大家好我是奶綠茶, 最近在研究 Flare3D, 已經有許多不錯的作品 看到了一個換色的效果很炫,Google 後找到了相關的技術文章 http://www.nissan-stagejuk3d.com/ nissan 就有用到這個效果, 該網站是使用 Away3D 參考文章: http://blog.volger.org/switchingcolor-shader/ Demo: https://dl.dropbox.com/u/2069696/blog/index.html?s=2012_06_15_Flare3D_switchcolorfilter/flare3d 轉載請註明出處 SourceCodeDownload

Flash, Android 呼叫 ASP.NET WebService

大家好,我是奶綠茶 今天來分享如何使用 Flash 及 Android 呼叫 ASP.NET 的 WebService WebService 的好處, 就是可以把專案所有要用到的方法, 寫在一隻程式裡, 方便日後管理。 傳接的格式, 都使用 JSON .net 傳 WebService程式 [WebService(Namespace = "http://milkmidi.com/")] //注意這個 Namespace [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { private static JavaScriptSerializer serializer = new JavaScriptSerializer(); public WebService () { } [WebMethod] public string getArray() { return serializer.Serialize(new string[] { "A", "B", "c" }); } [WebMethod] public string getObject() { var json = new { RS = "OK" }; return serializer.Serialize(json); } /// /// Client 端傳 JSON 格式, Server 端解 /// [WebMethod] public string setObject(string json) { JsonObject obj = JsonConvert.Import(...

簡易版 3D Banner 效果

大家好,我是奶綠茶 最近學生問起了一個 3D 的 Banner 效果要如何製作 寫了一個簡單的 Demo, 程式碼也很短, 只用到 TweenMax , 和 FlashPlayer10 的 3D 即可做到 /* milkmidi.blogspot.com */ import com.greensock.TweenMax; var container:Sprite = new Sprite(); container.x = stage.stageWidth >> 1; addChild( container ); addEventListener(Event.ENTER_FRAME , enterFrameHandler); var back:MovieClip = new Back_mc; back.x = stage.stageWidth >>1; back.y = 40; back.visible=false; addChild( back ); back.addEventListener(MouseEvent.CLICK , function(){ showBack(false); }); (function () { for(var i:int = 0 ; i<6 ; i++){ var _mc:MovieClip = new Item_mc; _mc.width = 100; _mc.scaleY = _mc.scaleX; _mc.x = 110*i - (110*3); _mc.y = 40; _mc.addEventListener(MouseEvent.ROLL_OVER , itemOverOutHandler); _mc.addEventListener(MouseEvent.ROLL_OUT , itemOverOutHandler); _mc.addEventListener(MouseEvent.CLICK , itemOverOutHandler); _mc.gotoAndStop(i+1); container.addChild( _mc ); } function itemOverOutHandler (e:...

Flash is Dead?

最近 Adobe 公佈了一項重要訊息 將不再更新行動裝置上的 Flash Player Plugin 所以 Flash 以死, 我將失業(誤) 其實也沒那麼嚴重, 只是將重心放在 Apps for Mobile. 其實我覺得在手機、或是平版上, 看用 flash 製作的 PC 版網站, 本來就是一件奇怪的事 因為在設計理念上時, 就已經不一樣, 硬體規格也不同 當初 Jobs 不讓水果版支援 Flash , 這點我也認同, 必竟本來就是二個不同的東西 Flash 失去了跨平台的優勢, 那下一步呢? 還要不要學 Flash ? 來說說我自已的觀點。 把市場切割成桌機(PC , Mac)、行動裝置(IOS, Android)二者 桌機: 以前 Flash 只能單靠 CPU 運算,現在多了硬體加速的支援, 能做到的效果屌太多了 Flash 有個最強大的優勢,就是快速製作 Content 的好工具, 程式也好寫, 在製作 Web 網站時, 還是第一首選。 現在許多的互動裝置, 都可以和 flash 溝通, 在呈現面上, Flash 的優勢還是最好。 (你可以用 Java , C# 去跑動畫試試看, 就知道 Flash 太簡單了) 行動裝置: 因為硬體的關系,不可能跑到像桌機上那麼復雜的效果, 就算今天水果支援了 Flash , 在使用者操作的考量上, 還是要做二個版本 Html5 就變成了唯一的選擇, 好在你會寫 AS3, Html5 的程式對你不會太難, 難在的是不同瀏覽器對 Html5 的支援度完全不同 ---------------------我是分隔線之大家好,我是奶綠茶--------------------------- 為了要讓二者平台都能看, 又想省錢不想做二個版本(最好能包山包海通通包) 就選 Html5 版就好了呀! 錯, 因為 IE8 以下不支援 Html5 , IE9又限定 WIN7 才能裝, 裝了後, 也不是完整的支援 Html5 且且且且且且且且, W3C 都還沒統一規格, 光針對瀏覽器, 就可以寫死你 還是回到一開始說的, 還是要做二個版本 Adobe 將把重心放在 Apps for Mobile. 指的就是跨平台技術 AIR. 用 AIR 寫的 app. 本質還是 flas...

Android , Adobe AIR Socket

大家好,我是奶綠茶 今天來介紹一下 Adobe AIR ServerSocket 需求: 很多台電腦,在同一個區網,要能彼此溝通,同時 Android 平版也要能傳接值。 解: 本來想如果就只有單 flash 的話, 可以使用 P2P 區網連線就決解了, 但因為 Andriod 平版也要能支援, 所以就改成 Socket 來溝通。 那為什麼不用 Java 架 Socket Server 就好了,因為我是閃客(因為用 Java 做動畫會死人) AIR 端,使用ServerSocket 類別。 在畫面上就只放所有連線的 Client 列表,一個發送訊息的文字和Button, 一個接收的文字 <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="createComplete(event);" close="appCloseHandler()"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import flash.display.NativeWindow; import flash.events.Event; import flash.events.ProgressEvent; import flash.ev...

Flash in Android WebView

大家好,我是奶綠茶 在 Android 裡可以使用 WbeView 來包一個 flash 的網頁 但在 3.0 以上的版本要再多加一些設定,才能讓 flash 順利出現。 在 AndroidManifest.xml 加入這二段即可 uses-sdk android:minSdkVersion="11" application android:hardwareAccelerated="true" 完成

Andoird Launcher AIR App

大家好,我是奶綠茶 最近案子的需要,所以會用 Android 和 AIR 來混搭開發 app 遇到的問題有: 1.Android 怎麼啟動另一個 App(Andoird or AIR) ? 2.啟動後,如何帶變數過去? 3.反過來 AIR 啟動 Andoird 且帶值?  先了解 Android 怎麼啟動另一個 App. 使用 Intent 類別, 且指定要啟動的 app package路徑 Intent intent = new Intent( Intent.ACTION_MAIN , null); intent.addCategory( Intent.CATEGORY_LAUNCHER); final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.fuelgauge.PowerUsageSummary"); intent.setComponent(cn); startActivity(intent); 如果是要啟動 AIR 的 app. 就要在 package 前加上 air. new ComponentName("air.com.android.settings", "air.com.android.settings.fuelgauge.PowerUsageSummary");  第二個問題是啟動後,如何帶變數過去? 只要在 intent 使用 putExtra 即可 intent.putExtra("Key", "Value"); 接收的 Activity 在 onCreate(); 使用 getIntent().getExtras().getString("Key"); 但在 AIR 的部份,無法修改 onCreate ,所以只好找另外的方法。 好在 Android 的機制裡,可以使用 scheme 的方法呼叫, 像 market:// 這樣, 當遇到這樣的連結時,只要 app 有在 mainfest 設定 intent-filter 的話,就會啟動該 app...

UIFlow for Flash

這次來練習一下仿 iPhone 的 UIFlow Flash 版 轉載請註明出處 製作羅輯: 把所有的圖片丟到一個 Sprite 裡,並依序排列 接下時,記錄當下的滑鼠座標 再用 EnterFrame 不斷的記錄現在的座標和上一個 FPS 的座標差 丟給主要的 Sprite.x 屬性。 放開後,判斷使用者是否拉動超過一半,移動到下一個或上一個, 當托到第一個或最後一個時,拉動的距離要越來越慢。 IPhoneScrollTween.as /** * @author milkmidi * @version 1.0.1 * @date created 2011/06/01 */ package milkmidi.behavior { import com.greensock.TweenMax; import com.greensock.easing.Cubic; import flash.display.DisplayObject; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageQuality; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.MouseEvent; import flash.geom.Point; /** * IPhone scroll behavior */ public class IPhoneScrollTween { private static var DECAY :Number = 0.98; private static var BOUNCING_SPRINGESS :Number = 0.45; private static var SNAP_VELOCITY :Number = 40; private var mStage:Stage; public function get stage():Stage { return mStage; } ...

關於 Flash Preloader

大家好,我是奶綠茶 今天來講解一下關於 Flash Preloader 的概念 在製作 Flash WebSite 時, 為了避免一開始讓使用者等太久 所以都會製作一個 Loading 的畫面, 讓使用者知道目前的載入進度 有許多人問我,為何當畫面出現時, 己經載到百分之30以上 因為 Flash 至少要載入完畢第一個影格的資料, 才會出現畫面 曾看過設計師為了要讓 Loading 美美的, 放了一個 1mb 的影片動畫 結果當然是一片白, 什麼都看不到。 所以應該要避免 1.第一個影格上有太多的元件、圖片 2.Library 裡的元件,如果有選“匯出到第一個影格時“,也會增加第一影格的大小。 要決解這問題最好的方法就是 方法一: 把 Loading 製作成一個獨立的 swf 檔 用該檔去載入你的主 swf 檔 方法二: 或是可以使用 FlexSDK 裡的 [Frame(fractoryClass="預載用的類別名稱")] 表籤 今天就來解說這樣的製作方法 主程式 Main.as 和一般的寫法都一樣,只要在上方加入該 Tag package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; [Frame(factoryClass="Preloader")] // 指定預載用的類別為 Preloader public class Main extends Sprite { [Embed(source='buttle2007.jpg')] //放一張照片測試用 public static const JPG:Class; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAG...

第2次AS讀書會

http://www.facebook.com/event.php?eid=153597431365750 時間 3月8日 · 19:00 - 21:00 地點 未定 召集人 Flash/Flex/AS精武讀書會 詳情 主題:progression 講者:Gray http://www.facebook.com/gray.liao 主題:FlashDevelop在專案上的應用 講者:奶綠茶 http://www.facebook.com/milkmidi 有興趣的朋友可以多多參加

FlashAS3 TextField link

大家好,我是奶綠茶 flash裡的動態文字類別有個 link 的 event 可以使用 直接看程式碼 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html 轉載請註明出處 public function TextFieldDemo() { var _tf:TextField = new TextField; _tf.htmlText = " 點我milkmidi "; _tf.addEventListener(TextEvent.LINK , _linkHandler); this.addChild( _tf ); } private function _linkHandler(e:TextEvent):void { trace(e.text); } 使用方法只要在動態文字上使用 htmlText 屬性 然後在 href='event:' 這是固定寫法, 面後再加上你要出現的文字 這樣就可以了,好處是這樣就可以透過 XML 的方法,來決解文字點擊後要做什麼事 另類用法,如果希望動態文字 Over 後 直接出現手指滑鼠的話, 以前的做法需要多包一層 Sprite 現在可以用這樣寫 tf.htmlText = " 點我milkmidi "; 給他一個空的就可以 Enjoy it

位元移動與RGB

大家好,我是奶綠茶 什麼是位元的移動運算呢? 在 flash 裡,使用的符號是: >>(二個大於, 位元向右移) , > 1 這句的意思是說,8 的二進位數位, 向右移一個位元 8 (十進位) 的 二進位數值即是:1000 簡單對照一下: 左邊是十進位, 右邊是二進位 1 = 1 2 = 10 3 = 11 4 = 100 5 = 101 6 = 110 7 = 111 8 = 1000 所以 1000 , 向右移一個位元, 即是踢掉最右邊的那個值, 得到 100 就等於 4(十進位) 好理解的方法,就是 8 除以 2 那 8 >> 2 呢 就是右移二個位元, 踢掉最右邊的二個值, 得到 10 就等於 2(十進位) 好理解的方法,就是 8 除以 2 ,再除以2 反之: > 1 值 * 0.5 值 / 2 2. 直接得到整數 在 flash 裡, 元件的座標出現小數點的話, 會容易會糊糊的 如果此時想要得到某個數值的一半且是整數的話,就用 位元移動的算法吧 缺點 1. 運算優先權的順序 先乘除, 後加減, 這是不變的定律 但位元移動的優先權是最低的,所以是 先乘除, 後加減, 再做位元移動的運算 例: 8 >> 1 + 1 = 2 8 * 0.5 +1 = 5 8 / 2 +1 = 5 結果是不同的。 取RGB數值 大家好,我是奶綠茶 有個色碼為:var color:uint = 0x1199FF; 0x 指的是 16 進位, 一般都是用在色碼上 現在想取出這個色碼的 R, G , B值 當然不能用 String 來抓 這時候就要上位元移動和數位邏輯來製作。 一樣要先把 16 進位轉成 2 進位 偷懶一下,開啟小算盤, 就有轉換的功能了 2 進位為: 100011001100111111111(共24個位元) 所以我們可以知道一個色碼, 佔了 8 個位元 取出 R :就是把右邊的 16 個通通踢掉 var r:uint = color >> 16; 簡單吧 取出 G :因為 G 色碼是在正中間, 所以要先踢掉右邊的 8 位元 var g:uint = color >> 8; 再把...

FlashAS3 亂數不重複的方法

大家好,我是奶綠茶 亂數不重複的方法我想在很多時候都用的到 今天就來分享一下在 flash AS3 裡如何寫呢 假設要取 0 - 9 亂數不重複的3個數字 奶小茶我使用的方法是 1.先建立 0 - 9 的 Array 共 10 個元素 2.亂數排序(參考下方的 shuffle) 3.每次取出 Array 的第一個元素(或最後一個元素, 反正都已經亂排了), 並移除 4.重複第三個Step, 就完成啦。 var _array:Array = [] for (var i:int = pMin; i 感謝 Ticore 提醒 PS. 奶綠,文章標題有錯別字 "重複" -> "重覆" 打錯字, 扣五分

Generate SWF

大家好,我是奶綠茶 在 flash 裡,想要透過程式 , 在 runtime 時產生一個新的 swf 檔 可以使用 swfassist 但無法自定類別或是屬性。 今天來介紹另一套類別: as3-commons-bytecode 這套類別可自定一個新的類別, 加入自定的屬性和方法,然後另存一個新的 swf 檔 但目前奶綠我試的結果,無法加入圖片或影格(如果有好心人事試出來的話,也請指教一下) 1. 先下載他的 類別包, 要載四個 swf as3commons-bytecode-0.9.swc as3commons-lang-0.3.1.swc as3commons-logging-1.2.swc as3commons-reflect-1.3.3.1.swc 都在他的 project 頁面裡。 測試 /** * @author milkmidi * @see http://milkmidi.blogspot.com * @version 1.0.1 * @date created 2010/12/27/ */ package { import flash.display.Sprite; import flash.events.Event; import flash.net.FileReference; import flash.system.ApplicationDomain; import flash.utils.ByteArray; import org.as3commons.bytecode.abc.enum.Opcode; import org.as3commons.bytecode.emit.IAbcBuilder; import org.as3commons.bytecode.emit.IClassBuilder; import org.as3commons.bytecode.emit.IMethodBuilder; import org.as3commons.bytecode.emit.impl.AbcBuilder; import org.as3commons.reflect.AccessorAccess; public class MyDemo1 extends Sprite { ...