超過百場的 MAX 2009 研討會影片不容錯過
MAX 2009 ENVISION
http://tv.adobe.com/show/max-2009-envision/
MAX 2009 DEVELOP
http://tv.adobe.com/show/max-2009-develop/
MAX 2009 DESIGN
http://tv.adobe.com/show/max-2009-design/
MAX 2009 ENVISION
http://tv.adobe.com/show/max-2009-envision/
MAX 2009 DEVELOP
http://tv.adobe.com/show/max-2009-develop/
MAX 2009 DESIGN
http://tv.adobe.com/show/max-2009-design/
MAX 2009 研討會搶先展示 Adobe Flash Professional CS5 Beta 嶄新 iPhone 應用程式輸出功能
【2009 年 10 月 13 日,台北訊】全球軟體大廠奧多比於 Adobe MAX 全球開發者研討會上宣佈新一代 Adobe Flash Professional CS5 將提供能製作豐富互動 iPhone 及 iPod Touch 應用程式的嶄新功能。Flash Professional CS5 公開測試版本預定於今年底前推出。在 MAX 專題展示中,奧多比搶先為全球開發人員說明如何應用 Flash Professional CS5 輸出 iPhone 應用程式,這項新功能運用的程式碼與 Flash 平台的執行時期(runtime)- Adobe AIR 及 Flash Player 10 相同,因此同樣可跨越各種平台與裝置傳遞應用程式。透過這項嶄新技術將讓全球數百萬設計及開發人員得以運用奧多比最受歡迎的 Flash 編譯工具進入 iPhone 應用程式的開發世界。
奧多比同時亦展示多款運用 Flash Professional CS5 測試版所製作的最新 iPhone 應用程式。目前已經開始運用測試版本進行 iPhone 應用程式設計的開發團體包括了BlueSkyNorth、Bowler Hat Games、Breakdesign、FlashGameLicense、Muchosmedia、PushButton Labs、South Park Digital Studios 及其他多家公司。奧多比同時宣佈有多項應用程式已遞交至 App Store 進行上架審核,其中包括奧多比網頁會議解決方案 - Adobe Acrobat Connect Pro 的 iPhone 應用程式。全球 iPhone 用戶可透過 Apple App Store 下載其中多款最新應用程式產品。如需更多相關資訊,請造訪 www.adobe.com/go/iphone。
Adobe Flash 平台技術能為設計及開發人員帶來更多嶄新商機,讓他們運用相同的程式碼輕鬆應對多樣化的作業系統及裝置環境。而為了協助開發人員進一步進入 iPhone 程式設計領域,Flash Professional CS5 測試版也計劃加入新的文字引擎(text engine),以提供更強大的創意自由度及文字控制功能;同時還有強化的團隊專案協同效能、即時增加互動效果的預設程式碼摘錄(code snippet)功能以及整合 Adobe Flash Builder 所提供的進階 ActionScript 編輯功能。如需更多 Flash Professional CS5 測試版相關資訊,請造訪 www.adobe.com/go/flashprobeta。
奧多比也於今日同步發表 Flash Player 10.1,新版將針對各種裝置提供一致的執行時期,並且已在 Open Screen Project 計劃中獲得近 50 家業界領導大廠的支持。這項由業界共同推動的標準計畫,將能讓消費者在各種裝置上得到一致且豐富的網際網路體驗。Flash Player 10.1 預定將陸續推出於一系列行動平台,包括Google Android、Blackberry、Symbian、Palm webOS 及 Windows Mobile。由於 Apple iPhone SDK 授權條款禁止執行程序直譯碼(runtime interpreted code),因此在蘋果電腦不支援的情況下,奧多比暫時無法在 iPhone 的 Safari 瀏覽器中提供Flash Player。然而透過 Adobe Flash Professional CS5 測試版所製作的 iPhone 應用程式,將不會包含任何執行程序直譯碼。
如欲觀賞奧多比於 Adobe MAX 展示為 Flash 開發人員推出 iPhone 應用程式設計解決方案的影片,請至 www.youtube.com/watch?v=rebv7iXKufw。
關於 Adobe Flash Platform
Adobe Flash Platform 是一項領先的網頁設計及開發平台,能創作設計極為出色的應用軟體、內容及影像,並能跨越最多樣的作業系統及裝置限制,同時已連結全球將近 98% 的連網電腦。其中 Flash Player 10 才剛宣佈推出10 個月,全球電腦下載安裝率即已突破 93%。根據comScore Media Metrix 的統計,目前全球有 75% 的線上影像內容,都是使用 Adobe Flash 技術來加以瀏覽與傳遞,因此 Flash 早已成為全球使用率第一的網路影像格式。全球各大傳媒企業,包括 Disney.com、MLB.com 及 DIRECTV,都使用 Adobe Flash 平台來傳遞影像內容;同時像是 YouTube 及 MySpace,也使用 Adobe Flash 平台技術來強化社交網路平台效能。如欲了解更多 Adobe Flash 平台相關技術,請造訪 www.adobe.com/flashplatform。
業界證言
Kevin Lynch - 奧多比技術長
「奧多比工程團隊成功為 iPhone 帶來最新的 Flash 技術應用,讓 Flash 開發社群得以全面進軍 App Store 市場。當有朝一日,蘋果電腦準備為 iPhone 用戶提供更完整的網頁瀏覽體驗時,我們也早已準備好將 Flash Player 支援效能帶入 Safari 瀏覽器。」
John Loiacono - 奧多比創意解決方案部門資深副總裁
「Adobe Creative Suite 是全球設計與開發人員都極為仰賴的創意工具,能夠應用於所有的內容及程式創作領域,為產品、品牌及概念帶來傑出創意。而這項嶄新的技術進展,則更將讓全球Flash開發者能夠充分運用既有的內容與專業知識,為 iPhone 領域帶來與 Flash 相容裝置同樣的使用體驗。」
Chris Petty - BlueskyNorth 公司溝通部門總監
「BlueskyNorth 是一家秉持傑出創意理念的設計公司,曾開發出多項贏得大獎並易於使用的應用程式產品。透過 Flash Professional CS5 測試版輸出製作 iPhone 應用程式的嶄新技術,我們將能更專注於現有的專業領域,並將既有的內容產品拓展推廣到 iPhone 用戶族群。」
Josh Tynjala - Bowler Hat Games 公司創辦人
「利用 Flash Professional CS5 測試版能夠製作 iPhone 應用程式的新功能,我們將不再需要煩惱是否應該學習新的程式設計語言或是其他開發工具。相對的,我們可以更為集中精力在如何研究開發更有趣的行動裝置遊戲,像是讓我們知名的 Chroma Circuit 遊戲能夠進軍 iPhone 市場,如此一來勢必更能大幅提升公司的營收領域。」
Stefan Wessels - Breakdesign 公司共同創辦人
「能轉換輸出現有的 Flash Lite 遊戲以及使用 Flash 技術開發新的 iPhone 休閒遊戲對我們來說無異是天大的好消息!像我們這樣的小型開發團隊,這是第一次無須繁雜的程式重新編寫流程,就能輕易為多種裝置平台開發行動遊戲的最佳選擇。」
Adam Schroeder - FlashGameLicense.com 共同創辦人
「Flash 網頁遊戲市場潛力驚人,而透過這項新的 Flash Professional CS5 測試版技術能讓開發人員可以運用既有的程式碼推出新產品,像是我們最近就積極投入由 DifferenceGames 所設計的 Red Hood 遊戲,並預備推出新的版本。Flash 是絕佳的休閒類遊戲平台,利用這項嶄新的技術,將更能為開發人員帶來巨大的商機拓展。」
Stefan Richter - Muchosmedia 創辦人
「我們非常興奮可使用既有的 Flash 技術投入 iPhone 開發,設計出更豐富且更具吸引力的多人應用程式。由於能直接在 Actionscript 3 進行設計,並且直接輸出成為 iPhone 與 iPod Touch 格式,因此我們公司最受歡迎的 Just Letters Game 這套遊戲,將能藉此拓展到新平台上,提供給更廣泛的市場大眾。」
Ben Garney - PushButton Labs 公司 Flash 平台資深開發人員
「使用 Flash Professional CS5 測試版製作 Trading Stuff In Outer Space 的 iPhone 版軟體實在讓我感到極為震撼!這項嶄新的工具非常容易上手使用 - 幾乎只要幾分鐘,就能將設計轉換為 iPhone 專用內容。奧多比一直希望能將 Flash 技術帶入 iPhone 領域,如今我們非常高興看到這項技術終於進入成熟運用階段。」
多媒體資訊
如欲了解如何使用 Flash Professional CS5 測試版開發 iPhone 程式,請造訪 www.adobe.com/go/iphone。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
將近 50 家 Open Screen Project 成員支援多平台運行的新瀏覽執行時期
【2009 年 10 月 13 日,台北訊】全球軟體大廠奧多比今日推出 Adobe Flash Player 10.1,此將支援智慧型手機、小型行動裝置(smartbooks)、小筆電、一般電腦以及其他連網裝置等,讓使用 Adobe Flash 平台製作的內容能隨時隨地連結目標族群。奧多比預計今年底前公開開發人員測試版本的瀏覽器版執行時期 (runtime),屆時將支援 Windows Mobile、Palm webOS 平台以及 Windows、Mac 與 Linux 等桌上型作業系統。而 Google Android 與 Symbian OS 的測試版執行時期預計將於 2010 年初推出。此外,Adobe 與 RIM 宣佈共同合作,將讓 Blackberry 智慧手機支援 Flash Player。同時 Google 亦宣佈加入 Open Screen Project 計劃 - 目前已將近 50 家業界領導廠商參與此計劃。
Flash Player 10.1 是 Open Screen Project 的首款執行時期,可在各種裝置間呈現一致的網路瀏覽體驗,如極為出色的應用程式、內容和 HD 高畫質影片。透過 Flash 平台的網路程式建置模組,瀏覽器版執行時期可讓數百萬設計及開發人員有效運用現有的程式碼與素材,降低在跨作業系統與瀏覽器間創作、測試和開發內容的成本。所有支援平台的 Flash Player 10.1 皆可輕易進行更新,確保即時支援各種創新應用,因應瞬息萬變的網路演進。
瀏覽器版執行時期可利用圖形處理器(GPU)運算能力加速影片和圖形的處理,大幅減少資源使用率,同時延長電池壽命。新版為行動裝置本身的功能特別強化,包含支援多點觸控、手勢控制、裝置輸入模組、加速感應與螢幕方向偵測,將為行動瀏覽體驗帶來超乎想像的創意操作與表現力。Flash Player 10.1 也特別提昇 HTTP Streaming 串流媒體傳輸能力,包含整合由 Adobe Flash Access 2.0 提供的內容保護能力。這項開發代碼為 Zeri 的 HTTP 技術將採用根據產業標準而設的開放格式,且將提供內容出版商、發佈商及產業夥伴所需的工具,使其可以更有效地利用 HTTP 基礎架構傳遞 Flash Player 10.1 與 Adobe AIR 2.0 軟體製作的高品質媒體。
欲知更多關於 Flash Player 10.1 的相關資訊與示範影片,請參訪 Adobe Labs(labs.adobe.com/technologies/flashplayer10/)。
「Flash Player 將邁向全新行動平台,使用者未來可隨時隨地完整體驗以 Flash 製作的網路內容或應用程式,」奧多比平台事業部副總裁暨總經理 David Wadhwani 表示:「我們很高興能廣泛與將近 50 家業界領導廠商共同參與 Open Screen Project 計劃,並與全球前 20 大手機製造商中的 19 家保持合作。我們非常期待明年上半年就能看到全球第一台完整支援 Flash Player 的行動裝置上市。」
Google 產品管理部副總裁 Sundar Pichai 表示:「我們非常興奮和 Adobe 與其他領導廠商一起加入Open Screen Project 計劃,這項計劃支持我們邁向共同目標,推動網際網路成為一個平台架構,並利用如 Adobe Flash 這樣的技術來促進產業創新。」
微軟產品管理部總經理 Stephanie Ferguson 說:「Adobe Flash 技術在全新 Windows Phone 上提供了關鍵體驗,讓使用者隨時隨地享受豐富的 Flash 遊戲、影片和其他互動網路內容。我們很期待在 Adobe Flash Player 10.1 正式推出後為 Windows Phone 瀏覽帶來更多嶄新功能。」
「摩托羅拉非常高興能在明年初成為最先推出首款支援 Flash Player 的 Android 手機製造商之一。」 摩托羅拉軟體平台與生態系統部副總裁 Cindy Wyatt 指出:「Flash 為網路上第一大影音平台,完整瀏覽 Flash 內容是豐富行動體驗中不可或缺的要件,也是用戶期望摩托羅拉今後可提供的服務。」
「身為奧多比長期的合作夥伴,以及現有出貨超過 400 萬部 Nokia 手機皆已支援Flash技術,我們非常期待 Flash Player 可以於更多手機與其他行動裝置運作,」諾基亞論壇副總裁 Purnima Kochikar 表示:「 Nokia 非常期待行動裝置上出現完整的 Flash Player,我們也保證 2010 年出貨的行種裝置一定會支援 Flash Player 10.1。」
Open Screen Project
由奧多比提倡的 Open Screen Project 計劃擁有將近 50 家業界領導廠商共同努力,目標在建立跨越行動電話、桌上電腦以及其他消費性電子裝置等的一致執行時期。這項活動旨在促使網路瀏覽和各種獨立應用程式皆可在廣泛的各式裝置上順暢執行,消弭各種阻礙以跨越不同螢幕限制,提供一致的內容和應用程式。共同參與這項計劃的廠商包含 Antena 3、Atlantic Records、ARM、BBC、Burda、Cell、中華電信、Cisco、Comcast、Conde Nast、Daum、Disney Interactive、Fox Mobile、Google、宏達電、Intel、LG Electronics、Lionsgate、Marvell、Motorola、MTV Networks、NBC Universal、Nokia、NTT DoCoMo、NVIDIA、OpenTV、Palm、Paramount、QNX Software Systems、Qualcomm、Stern.de、RIM、RTL、Samsung、Sony Ericsson、Texas Instruments 等。如欲了解 Open Screen Project的其他相關資訊,請至 www.openscreenproject.org。
關於 Adobe Flash 平台
Adobe Flash Platform 是一項領先的網頁設計及開發平台,能創作設計極為出色的應用軟體、內容及影像,並能跨越最多樣的作業系統及裝置限制,同時已連結全球將近 98% 的連網電腦。其中 Flash Player 10 才剛宣佈推出10 個月,全球電腦下載安裝率即已突破 93%。根據comScore Media Metrix 的統計,目前全球有 75% 的線上影像內容,都是使用 Adobe Flash 技術來加以瀏覽與傳遞,因此 Flash 早已成為全球使用率第一的網路影像格式。全球各大傳媒企業,包括 Disney.com、MLB.com 及 DIRECTV,都使用 Adobe Flash 平台來傳遞影像內容;同時像是 YouTube 及 MySpace,也使用 Adobe Flash 平台技術來強化社交網路平台效能。如欲了解更多 Adobe Flash 平台相關技術,請造訪 www.adobe.com/flashplatform。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
將絕佳的網路瀏覽介面帶入最夯的行動裝置 讓工具創新精進設計開發流程
【2009 年 10 月 13 日,台北訊】全球軟體大廠奧多比於 Adobe MAX 全球開發人員大會上宣佈 Adobe Flash 平台諸多重要進展,以及揭曉 Flash Player 10.1,此將讓豐富網路內容、影音及應用程式觸及比以往更廣泛的各式裝置使用者。此外,奧多比也針對 Flash 平台的影音功能發表最新 HTTP 串流技術、展示 Adobe AIR 2 的嶄新功能,並推出 Adobe Flash Builder 及 Flash Catalyst 的 beta 2 測試版本,和全新 Adobe Flash 平台協同服務。
奧多比技術長 Kevin Lynch 表示:「我們非常興奮能在今年 Adobe MAX 大會上推出一系列 Flash 平台的最新工具版本。透過提供跨界工具、執行時期 (runtime)、服務內容及伺服器的快速創新,我們將協助整個產業中廣大且活躍的設計及開發人員利用豐富內容及應用程式促進網際網路發展。」
以同樣執行時期傳遞跨越桌上電腦及行動裝置的內容 不受限於瀏覽器架構
奧多比所推出的 Flash Player 10.1 提供跨桌上電腦及行動裝置的一致執行時期,並獲得近 50 家參與 Open Screen Project 的廠商支持。預計將支援 Flash Player 10.1 的行動平台包含 Google Android、Blackberry、Symbian、Palm webOS 及 Windows Mobile 等。
Adobe AIR 1.0 為提供瀏覽器外的網路應用所開發的 Flash 平台執行時期,自去年推出以來下載量已累積超過 2 億次。今年 MAX 大會上所介紹的 Adobe AIR 2 將可在桌面應用環境中建立全新的應用程式,提供開發人員更多桌面作業系統的優化功能,例如針對大量儲存裝置、點對點網路以及 UDP 網路的強化支援。Adobe AIR 2 beta 測試版本將於 2009 年底前問世。
提供點對點作業流程的開發工具 提高設計開發效能
透過 Adobe Flash Builder 與 Flash Catalyst,開發及設計人員能以更有效率的方式協同合作,開發豐富且具表現力的使用者經驗。根據開放原始碼 Flex 架構所開發的 Adobe Flash Builder,其新增的強大功能可快速實現豐富型網際網路應用程式 (rich Internet application; RIA) 建置,該 beta 2 測試版本目前已開放於 Adobe Labs 下載。beta 2 測試版本不但加強許多新的 Flash Builder 程式編輯及測試功能,而且簡化 Java 服務的連結並改善新版 Spark Flex 架構組件的運作能力,而這將為設計及開發人員提供更具生產效率的作業流程及完善的客製化豐富型網際網路應用程式。透過整合新版 LiveCycle Enterprise Suite 2,Flash Builder 允許開發人員更容易設計企業 RIA 及與企業系統連結。如欲了解更多 Adobe Flash Builder 相關資訊及下載 beta 2 測試版本,請至 www.adobe.com/go/flashbuilder4。
本次 MAX 大會奧多比也發佈Adobe Flash Catalyst beta 2 測試版本,此新版專業互動設計工具可輕易與開發流程結合,並讓設計人員在無須編寫程式碼的情況下即能迅速開發呈現介面及互動式內容。
其新版功能包括透過客製化播放控制器即可輕易將影音新增於專案中、為其他使用者的回饋增添音效,以及結合更簡易的控制功能,提供更順暢的動畫,並利用 Adobe AIR 及 SWF 輸出功能,匯出成可於瀏覽器外運作的作品。如欲了解更多 Adobe Flash Catalyst 的相關訊息及下載 beta 2 測試版本,請至 www.adobe.com/go/flashcatalyst。
Adobe Flash 平台與 Adobe Creative Suite 4 產品系列密切整合。Adobe Creative Suite 4 為業界領先的設計與開發軟體工具,能夠應用於所有的內容及程式創作領域。
可實現無縫式線上影音內容串流的伺服器平台
奧多比針對在 Flash 平台上的 HTTP 串流媒體傳輸推出新的通訊協定支援計劃,包含整合由 Flash Access 2.0 所提供的數位內容保護。開發代碼為 Zeri 的 HTTP 技術將採用根據產業標準而設的開放格式,且將提供內容出版商、發佈商及產業夥伴所需的工具,使其可以更有效地利用 HTTP 基礎架構傳遞 Flash Player 10.1 與 Adobe AIR 2.0 軟體製作的高品質媒體。客戶使用 Flash Media Server 3.5 不外乎因它能提供互動式媒體經驗、提升網路效率、以及具備智慧型快取技術和即時溝通功能,而現在這些用戶將具備使用 HTTP 串流技術的彈性,除將支援現今所有的媒體編碼,透過支援 Flash player 的適合影像傳輸速率及網路視訊錄影系統,Zeri 將持續支援高品質 Live 直播及錄製媒體內容。有了 Zeri 及 Flash Media Server 3.5 的加持,Flash 平台將提供新世代高品質數位媒體體驗。
實現即時協同合作的服務內容
甫於近期推出的 Adobe Flash 平台服務為一線上托管服務,提供開發人員透過一個可預測且符合成本效益的佈署模型,為網路應用程式增加創新功能。無論開發人員、廣告主或是內容出版商皆可透過 Adobe Flash 平台服務讓設計開發應用達成易於分享、符合社交網路需求及達成協同合作的目的。
奧多比在這次 MAX 大會宣佈為 Flash 平台服務加入新的協同服務,Adobe LiveCycle 協同服務(前身為 Adobe Flash 協同服務)提供開發人員及企業一套可協助他們在既有或新的網路應用中建立即時且多人的協同專案解決方案,以提高收益並提升顧客獲取率 (customer acquisition) 及掌握度。該托管服務由 Flash 平台及部分 LiveCycle Enterprise Suite 2 所提供,適用於連貫的協同開發作業,無須擔心全球佈署、維護及擴充的問題。
關於 Adobe Flash 平台
Adobe Flash Platform 是一項領先的網頁設計及開發平台,能創作設計極為出色的應用軟體、內容及影像,並能跨越最多樣的作業系統及裝置限制,同時已連結全球將近 98% 的連網電腦。其中 Flash Player 10 才剛宣佈推出10 個月,全球電腦下載安裝率即已突破 93%。根據comScore Media Metrix 的統計,目前全球有 75% 的線上影像內容,都是使用 Adobe Flash 技術來加以瀏覽與傳遞,因此 Flash 早已成為全球使用率第一的網路影像格式。全球各大傳媒企業,包括 Disney.com、MLB.com 及 DIRECTV,都使用 Adobe Flash 平台來傳遞影像內容;同時像是 YouTube 及 MySpace,也使用 Adobe Flash 平台技術來強化社交網路平台效能。如欲了解更多 Adobe Flash 平台相關技術,請造訪 www.adobe.com/flashplatform。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
「創新的革命 Photoshop World 2009」於 11 月 4 日勁爆登場
【2009 年 10 月 7 日,台北訊】全球軟體大廠奧多比旗下 Adobe Photoshop 軟體自 1990 年推出後即顛覆了全世界對數位影像的想法,一直以來是攝影師與平面設計者不可或缺的必備工具,最新版本 Photoshop CS4 更是將影像一舉帶入 3D 的編修領域。奧多比 11 月 4 日將假台北紐約紐約典華信義會館舉辦「創新的革命 Photoshop World 2009」研討會活動,此次難得邀請到 Photoshop 催生者 - 奧多比資深行銷總監 Russell Brown 造訪台灣與使用者相見歡,同時帶來他最著名且獨一無二的「Russell Brown 秀」,Photoshop 在 1990 年即是靠「Russell Brown 秀」成功征服使用者的心,打下數位影像江山。精采活動勢必不容錯過,如欲親臨現場一睹 Photoshop 教父的風采,請至 www.myadobe.com.tw 報名,現場席次有限,前一百名完成報名者還可額外獲得 Adobe 限量紀念贈品,敬請提早卡位。
Adobe Photoshop 可說是當今世界上最暢銷的圖像編輯工具,這套建立許多業界領先標準的軟體最早是由 Knoll 兄弟於1987 年編寫而成,隨後在一次展示中,奧多比資深創意總監 Russell Brown 看到這程式的莫大潛力,進而促使 Photoshop 成為奧多比產品的一員。歷經多次產品革新,Adobe Photoshop 如今已是奧多比產品線中最重要的軟體之一。
Russell Brown 不僅是 Photoshop 的教父,對於 Photoshop 產品演進具諸多卓越貢獻, 他本身更是產品功能以外的最佳行銷利器,在 Photoshop 推廣初期即用幽默風趣的演繹方式讓使用者覺得 Photoshop 容易又好玩,進而讓軟體極短的時間內席捲市場。
Russell Brown 總是說:「學習 Adobe Photoshop 向來就不會是件枯燥無聊的事情」。
Russell 準備好最新銳的尖端技巧,將以他不可思議的 Photoshop 操作方式令現場大開眼界,並以融會貫通與充滿魅力的表演風格向現場來賓展示如何精準完成作品,並樂在其中。這次的「創新的革命 Photoshop World 2009」將帶領使用者一窺數位影像技巧與技術的嶄新未來。
關於 Adobe Photoshop World 2009 研討會
Adobe Photoshop World 2009 將於 11 月 4 日熱鬧登場,活動報名費用為新台幣 500 元整,參加者可獲得活動資料袋、中午餐盒與口譯機服務。此外,還將特別贈送市面上找不到、本活動專屬的「Russell Brown 秀」錦囊光碟一張,同時,當天只要填寫問卷即可加贈 Adobe CS4 時尚磁鐵組。
為感謝用戶的熱情參與,活動當天 Adobe 更大手筆提供價值十幾萬元的豐富抽獎獎項,包含 Photoshop CS4(建議售價 NT$ 39,290)、Photoshop CS4 Extended(建議售價 NT$ 56,130)與 Lightroom 2(建議售價 NT$ 16,030) 等,而購買 Adobe 產品者除可享現場特別優惠外,另可獲贈 Adobe CS4 紀念雨傘乙把。現場席次有限,機會難得,敬請提早卡位,如欲報名請至 www.myadobe.com.tw。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
今晚參加 TechCrunch 在台北第一次舉辦的網聚,網聚目的主要是在於讓 TechCrunch 亞洲區編輯可以看看台灣有哪些新創公司或服務,共有六家公司報名參加簡報,也讓這些新創公司能有機會與網友們討論一些自家產品方面的問題。





主持人致詞
20091005 TechCrunch Meetup Taipei - 主持人 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 來賓 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第一組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第二組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第三組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第四組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第五組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - 第六組 from Ben Chang on Vimeo.
20091005 TechCrunch Meetup Taipei - IPEVO from Ben Chang on Vimeo.
遇到一個問題,在 Flash IDE 中的時間軸上所設計的遮罩,若是用程式將他 reparentting 後,會導致在新的 container(該遮罩的parent) 中,所有 child index 在該遮罩之上的 display object,都會被該遮罩所遮到。
下圖是 UI 的配置,mask_mc 遮 contain_mc,在這組遮罩的上下各有一個 green_mc 與 blue_mc:
以下是程式碼,主要工作是建立一個新的 mc1 放到 MainTimeline 上,然後將 MainTimeline 上的所有 DisplayObject 都移進 mc1 中,並在動作前後都作一些 trace:
var mc1:MovieClip = new MovieClip();
mc1.name = "NewContainer";
addChild(mc1);
function traceInfo(container:DisplayObjectContainer):void{
trace("traceInfo()", container.name);
for(var i:int=0; itrace(i, container.getChildAt(i).name);
}
trace("");
}
trace("初始時的 MainTimeline");
traceInfo(this);
for(var i:int = numChildren-1; i>=0; i--){
var obj:DisplayObject = getChildAt(i);
if(obj!=mc1){
mc1.addChildAt(obj, 0);
}
}
_mc.getC
trace("reparentting 後的 MainTimeline");
traceInfo(this);
trace("reparentting 後的 NewContainer");
traceInfo(mc1);
var yellowLine:MovieClip = new YellowLine();
yellowLine.name = "yellowLine";
mc1.addChild(yellowLine);
trace("在 NewContainer 新加入 DisplayObject 後");
traceInfo(mc1);

標籤: AS3, Flash, mask, reparentting
讓水文水資源資料管理供應系統更加專業便捷
【2009 年 9 月 22 日,台北訊】全球軟體大廠奧多比今日宣布再添一 Adobe® Flash® 平台技術應用佳績!以提供技術服務、軟體工程、應用服務為主的地理資訊系統整合商銳俤科技,成功協助經濟部水利署「水文水資源資料管理供應系統」(http://gweb.wra.gov.tw/wrweb/) 的開發與升級,使其更具互動便利性。銳俤科技以 Adobe Flex® Builder™ 3 將現有複雜的水資源統計資料與空間數據轉化為可隨點即查的豐富型媒體系統,建立人性親和的系統介面。
新版「水文水資源資料管理供應系統」整合分散各級政府單位及公民營事業機構的水資源空間地理資料,建立完整水文水資源資料倉儲中心,並提高水資源資訊互通共享,以及全面提昇國內水資源規劃、管理、決策能力。這項結合 Adobe Flash 平台與地理資訊系統技術的整合模式為產業設下全新典範,亦在水利署的專案評比驗收中獲得專家學者高度肯定。
「現在幾乎所有連網電腦都已安裝 Flash Player,對用戶而言,新系統最大的優勢在於不需額外安裝他們不熟悉的元件。」銳俤科技 GIS 事業部環境資源業務處處長張志誠表示:「在 Flash 平台普及的優勢條件下,無論是一般用戶或專案客戶都能毫無顧慮地立即串連存取資料庫訊息。其他跨平台開發環境都有其限制,無法擔保用戶是否願意使用特定資訊格式。而架構在Flash環境就無須擔心此一問題,開發人員只要設計單一內容架構,就能立即無礙地執行於所有平台系統環境。」
Adobe Flex Builder 程式開發工具能智慧型編碼,交互式程式除錯,並以視覺化設計使用者介面排版、外觀與豐富型網際網路應用(RIA)。Adobe Flex Builder 亦內建多樣化的元件資料庫內容與模組設計,開發人員直接就能套用於各種系統設計需求,大幅度縮短專案開發時程,節省更多寶貴時間及人力。
水利署的「水文水資源資料管理供應系統」長期以來累積匯集了極為龐大的純文字資料庫內容,近年已對應用效率造成某種程度的影響。為滿足日漸豐富多樣化的資料格式,銳俤科技運用 Adobe Flex Builder 整合地圖開發與多媒體內容,以動靜態複合地圖技術(Hybrid Map)全面提升地理資訊系統,成功打造極具互動性的系統資料庫人機介面,與更順暢的地理資訊系統顯示效能。銳俤科技使用 Adobe Flex Builder 建立的地理資訊系統與其他線上資料庫的網路服務,讓新系統得以透過 Adobe Flash 平台毫無障礙地於所有作業系統及瀏覽器提供一致性的服務。
有鑑於成功以 Adobe Flash 平台技術佈署和改良水利署水文水資源資料管理供應系統,銳俤科技有信心將擁有豐富開放資源的 Adobe Flash 平台作為公司首選開發工具。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
Show出創意 打造夢想 豐富人生
酷炫新Show開發創意大賽是針對手機娛樂領域開發者所舉辦的大賽,由Sony Ericsson 開發者世界 主辦,大會宗旨在提升在校大學生手機領域學習者和廣大在校手機玩家的創新性與積極性,提供展現自我的創意舞台,打造參賽者未來職場生涯之路。
見證奇蹟 由此開始
Sony Ericsson開發者世界尊重每位參賽者的原創性,更重視每份參賽作品的用心﹔
獲獎者即可優先獲得Sony Ericsson北京總部研發中心的實習機會;
只是參賽”入圍者”皆可獲得Sony Ericsson開發者世界的榮譽證書;
所有入圍作品皆有機會與Sony Ericsson PlaynowTM合作,打造屬於自已的酷炫手機!
參賽得獎者皆可得到優渥的獎學金和Sony Ericsson的手機
誘人的大獎正在向你招手 還在等什麼 加快腳步動起來吧!
詳情請參閱活動網站
http://developer.sonyericsson.com/universityawards
活動專線:02-2516-1255#108
作品繳交期間: 2009年7月-10月20日
首屆競賽鼓勵亞太地區學生盡情揮灑絕佳創意
【2009 年 9 月 15 日,台北訊】全球軟體大廠奧多比今日宣佈第一屆 Adobe 亞太地區學校創意大獎將從 2009 年 9 月 15 日開始接受報名,這項大賽將開放給台灣、澳洲、香港、印度、印尼、中國、南韓、馬來西亞、菲律賓、新加坡、泰國以及紐西蘭等地,邀請這些地區 14 至 19 歲的年輕學子參加,為該區最令人激賞的年輕創意心靈提供舞台,不但在廣大觀眾前展現才華,同時也有機會獲得肯定並贏得誘人獎項。
奧多比致力深耕教育市場,長期以來更是不間斷地支持與鼓勵學子們在創意上的表現。藉由本次 Adobe 亞太校園創意大獎,奧多比期待能更擴大其對亞太地區青年朋友的貢獻。
奧多比亞太區教育推廣總監 John Treloar 表示:「奧多比一直以來努力啟發年輕人的創意天賦,並鼓勵他們藉由數位媒體工具來表現自己。2009 Adobe 亞太校園創意大獎正是個絕佳機會,提供舞台讓這些優秀的學子們表現才華並獲得肯定!」
這場競賽鼓勵學生們探索現今影響這個世界的議題,同時讓他們自由展現創意。學生們能以個人身分或組隊報名,從主辦單位所訂的三項類別及三種主題中選擇參加。競賽類別包含:
· 網頁設計或開發 — 可用於參賽的作品包含:網頁、部落格、互動式CD/DVD、網頁動畫、教學物件、行動設計…等。
· 視訊與影片 — 可用於參賽的作品包含:真人動畫、紀錄片、短片、動態繪圖、動畫影片、政令宣導…等。
· 美工與平面設計 — 可用於參賽的作品包含:繪圖作品、明信片、標誌、標籤、包裝、攝影作品、年鑑、廣告、雜誌、海報、文宣品/手冊、書籍、電子報…等。
這次的競賽主題包含:
· 環保 — 保護自然資源,例如水資源和能源,降低浪費,並使人類對環境的影響最小化。
· 法律 — 宣傳使用合法軟體。
· 其他任何主題 — 開放學生以自選主題參賽。
優勝者選拔與獎勵
奧多比將在各類別中選出 2 名決賽入圍者和 1 名得獎者,並另外選出 1 名金獎得主。冠軍得主與入圍者將由奧多比評審團遴選。
· 類別得獎者 — 類別優勝者將可獲得 Adobe Creative Suite 4 Master Collection 軟體與得獎證明乙紙。
· 決賽入圍者 — 個人決賽入圍者將可選擇獲得 Adobe Creative Suite 4 Design Premium、Web Premium 或 Production Premium 軟體,以及入圍證明乙紙。團體決賽入圍者的每位成員將可選擇獲得以下任一項軟體: Adobe Premiere Pro CS4、After Effects CS4、Adobe InDesign CS4、Adobe Photoshop CS4、Adobe Dreamweaver CS4 或 Adobe Flash CS4 Professional ,以及入圍證明乙紙。
· 金獎得主 — 金獎得主將可獲得得獎證明乙紙與筆記型電腦乙台(可選擇 Hewlett Packard Pavilion dv3600 或 Apple MacBook Pro 13 吋)。
· 教師 — 每個類別得獎者的指導老師將會獲得Adobe Creative Suite 4 Master Collection 軟體乙套。
· 學校 — 金獎得主的學校將獲得 30 份授權的 Adobe Creative Suite 4 Master Collection 軟體,供學校資訊教室 30 台電腦使用。
Adobe 將於 2009 年 9 月 15 日開始線上收件,提交期限為 2009 年 12 月 15 日。得獎者將於 2010 年 1 月 31 日之前公布,並以電子郵件通知。如需有關參賽類別、獎項和參賽要求的資訊,請參閱以下網站的官方規則 http://www.adobe-eduapac.com/award。
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
營造卓越教學成果 贏得學員及業界一致肯定
【2009 年 8 月 26 日,台北訊】全球軟體大廠奧多比與國內頂尖數位教學機構巨匠電腦鑑於日益增加的專業設計需求,共同聯手推動國內創意產業人才培育。巨匠電腦經與奧多比密切合作,建立、累積相當豐富的學習資源,諸如優質課程教材、頂尖技術交流和教師培訓等。此外,巨匠電腦也推出隨專業設計課程附贈 Adobe 教育版軟體計劃及 Adobe Certified Associate (ACA) 國際認證培訓課程,同時並積極舉辦相關美學講座及設計競賽,提供學員與國內設計界廣泛的交流空間,卓越成果贏得學員一致肯定。
「數位設計創意學習市場在台灣的需求越來越高,這已是十年來的趨勢。由於台灣在創意設計的成果全球有目共睹,同時各大專院校也紛紛設立設計相關科系,都是造就人才及市場需求不斷提升的主因。」巨匠電腦總經理黃志聰表示:「其中奧多比數位創意解決方案更是台灣設計市場的學習主流,課程設計以奧多比各項軟體產品為核心,才能讓學員汲取滿足就業市場需求的必備技能。巨匠電腦從早期 Photoshop 平面設計學習課程,陸續引進網頁設計學習,如 Flash 及 Dreamweaver 等熱門潮流技術,讓課程規劃得以貼近市場需求脈動。當奧多比發表 Adobe Creative Suite系列軟體後,巨匠電腦更積極導入由平面到動態的一連貫創意學習課程。」
在巨匠電腦報名奧多比相關設計課程的學員人數近年不斷提昇,去年已累積近三萬名學生參與,與2007年同期相較成長率超過 15%。「為讓學生有更好的學習成效,上課時間外也能在家練習軟體操作,巨匠電腦推出隨課程附贈Adobe教育版軟體的超值方案,」黃志聰補充說明:「身為創意產業中的領導廠商,奧多比所推出的軟體長久以來深獲設計領域專業人士的擁戴,而我們也會盡可能地幫學員做好投身該領域的一切準備。」
巨匠電腦於 2008 年 7 月啟動 ACA 認證課程計劃,並培訓專業講師熟悉相關作業,同年 11 月完成認證中心建置。ACA 認證乃是奧多比第一張國際中文版認證,並獲 ISTE 國際科技教育學會承認,認證內容著重多媒體網頁設計、數位內容及媒體傳播的核心應用能力、知識與技術。巨匠電腦成立 ACA 認證考試中心有助於推廣設計領域的證照制度,對學員投入職場或產業評估人才標準皆有非常正面的助益。
巨匠電腦在強化軟體教學技巧之餘,也著眼於提升學員的創意概念,為此近年來每年屢邀業界攝影大師及網路創意界知名人士舉辦各種美學講座及創意競賽。巨匠電腦深耕國內數位創意學習市場的努力及卓然成果,可說是業界有目共睹的優異典範!
奧多比公司簡介
奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw。
巨匠電腦簡介
巨匠電腦教育中心以「專業、服務、實在」的理念致力於電腦教育二十三年,已自創本身優質的本土教學品牌, 也是目前全國分校最多的電腦教育中心。
※由頤德國際 (Veda International Corp.) 代表奧多比公司 (Adobe Systems) 發稿。
颱風天在家裡,甚麼事情也不能做,更扯的是餐城也進不去,詭異的是我老婆可以...$%&@#,這時候只能暗自猜想 playfish 該不會將我的電腦變成拒絕往來戶了吧。既然沒有遊戲可以玩,只好趁機花點時間再繼續看看之前買的書:
ActionScript 3.0 Image Effects
http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchViewAction.do?isbn=1430218711&sid=50458

最近突然感覺身邊的人都在談 pureMVC,這個 framework 的目的是為了讓我們的程式功能切分乾淨:
Model 儲存資料
View 視覺、畫面
Controller 邏輯、流程控制
配合這三個基本元素,有著以下三個負責 "做事情" 的傢伙:
Proxy 負責存取 Model 的資料、取得外部資料...等
Mediator 負責對 View 作改變,以及監聽 View 的事件
Command 在 Controller 中的角色,是實作你商業邏輯的地方
而要讓這三方能 "認識" 彼此,就靠唯一的 Facade;若想要 "通知" 彼此的話,就必須送出 Notification,會由有興趣的人 收到通知後 進行後續的工作。
以上的概念,只要認識下面這張圖就可以了:
先對每個角色的 "位置" 有個瞭解,至於它們之間的那些 "箭頭" 表示著互通有無的關係,那就看不同的專案、每個人的經驗,來決定實務上的作法(誰可以與誰有互動),當然最好是越單純越好,別因為大家都可以透過 Facade 取得彼此而亂來。
以下,我作一個超陽春簡單的範例:
pureMVC_Test1.as
程式進入點,在這個程式中,我進行 UI 的建立,若是你的 UI 是 Flash(*.fla) 製作,或是 Flex Builder(*.mxml) 的話,就不用像我這樣寫一堆瑣碎的程式碼。
取得 ApplicationFacade 後,透過 init() 開始進行一連串的工作。
package {
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldType;
import idv.ben.test1.ApplicationFacade;
public class pureMVC_Test1 extends Sprite
{
public var txtSearch:TextField; //輸入搜尋字串的文字欄位
public var btnSearch:SimpleButton; //搜尋按鈕
public var txtResult:TextField; //顯示搜尋結果的文字欄位
public function pureMVC_Test1()
{
//初始化 UI
initComponents();
//開始叫 pureMVC 工作了
ApplicationFacade.getInstance().init(this);
}
/**
* 本範例的 UI 完全由程式產生,所以以下會有比較瑣碎的 UI 建立
*
*/
private function initComponents():void{
txtSearch = new TextField();
txtSearch.type = TextFieldType.INPUT;
txtSearch.border = true;
txtSearch.x = 100;
txtSearch.y = 50;
txtSearch.width = 200;
txtSearch.height = 20;
this.addChild(txtSearch);
var spriteBtn:Sprite = new Sprite();
spriteBtn.graphics.beginFill(0x999999);
spriteBtn.graphics.drawRect(0, 0, 100, 20);
spriteBtn.graphics.endFill();
var txtBtn:TextField = new TextField();
txtBtn.text = "SEARCH";
txtBtn.width = 100;
txtBtn.height = 20;
spriteBtn.addChild(txtBtn);
btnSearch = new SimpleButton(spriteBtn, spriteBtn, spriteBtn, spriteBtn);
btnSearch.x = 100;
btnSearch.y = 100;
this.addChild(btnSearch);
txtResult = new TextField();
txtResult.type = TextFieldType.DYNAMIC;
txtResult.border = true;
txtResult.x = 100;
txtResult.y = 150;
txtResult.width = 200;
txtResult.height = 20;
this.addChild(txtResult);
}
}
}
package idv.ben.test1
{
import idv.ben.test1.controller.InitCommand;
import org.puremvc.as3.interfaces.IFacade;
import org.puremvc.as3.patterns.facade.Facade;
public class ApplicationFacade extends Facade implements IFacade
{
static public const NOTIFICATION_INIT:String = "NOTIFICATION_INIT";
static public const NOTIFICATION_INITED:String = "NOTIFICATION_INITED";
static public const NOTIFICATION_SEARCH:String = "NOTIFICATION_SEARCH";
static public const NOTIFICATION_RESULT:String = "NOTIFICATION_RESULT";
static public function getInstance():ApplicationFacade{
if(instance==null)
instance = new ApplicationFacade();
return ApplicationFacade(instance);
}
/**
* 當建立 Facade 過程中,要取得 Controller 時,會有機會讓開發者可以定義一些有的沒的
*
*/
override protected function initializeController():void{
super.initializeController();
//註冊 當 NOTIFICATION_INIT 發生時,由 InitCommand 類別來處理
this.registerCommand(NOTIFICATION_INIT, InitCommand);
}
/**
* 開始工作
* @param app
*
*/
public function init(app:pureMVC_Test1):void{
//通知 發生 NOTIFICATION_INIT
this.sendNotification(NOTIFICATION_INIT, app);
}
}
}
package idv.ben.test1.controller
{
import idv.ben.test1.ApplicationFacade;
import idv.ben.test1.model.DataProxy;
import idv.ben.test1.view.MainMediator;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class InitCommand extends SimpleCommand implements ICommand
{
public function InitCommand()
{
super();
}
override public function execute(notification:INotification):void
{
//註冊 儲存資料的物件
this.facade.registerProxy(new DataProxy());
//註冊 指定的UI 是由哪個 Mediator 負責管理
var app:pureMVC_Test1 = pureMVC_Test1(notification.getBody());
this.facade.registerMediator(new MainMediator(app));
//註冊 當 NOTIFICATION_SEARCH 發生時,由 SearchCommand 類別來處理
this.facade.registerCommand(ApplicationFacade.NOTIFICATION_SEARCH, SearchCommand);
//通知 發生 NOTIFICATION_INITED
this.facade.sendNotification(ApplicationFacade.NOTIFICATION_INITED);
}
}
}
package idv.ben.test1.view
{
import flash.events.MouseEvent;
import idv.ben.test1.ApplicationFacade;
import idv.ben.test1.model.DataProxy;
import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.mediator.Mediator;
public class MainMediator extends Mediator implements IMediator
{
static private const MEDIATOR_NAME:String = "MainMediator";
private var dataProxy:DataProxy;
private function get app():pureMVC_Test1{
return pureMVC_Test1(this.viewComponent);
}
public function MainMediator(viewComponent:Object=null)
{
super(MEDIATOR_NAME, viewComponent);
//記住負責儲存資料的物件是誰
dataProxy = DataProxy(this.facade.retrieveProxy(DataProxy.PROXY_NAME));
}
/**
* 此 Mediator 關心哪些 Notification
* @return
*
*/
override public function listNotificationInterests():Array{
return [ApplicationFacade.NOTIFICATION_INITED
, ApplicationFacade.NOTIFICATION_RESULT];
}
/**
* 當此 Mediator 關心的 Notification 發生時,分別要做哪些工作
* @param notification
*
*/
override public function handleNotification(notification:INotification):void{
switch(notification.getName()){
case ApplicationFacade.NOTIFICATION_INITED:
onNotify_inited(notification);
break;
case ApplicationFacade.NOTIFICATION_RESULT:
onNotify_result(notification);
break;
}
}
/**
* Facade 初始化完成時
*
*/
private function onNotify_inited(notification:INotification):void{
setListener(true);
}
/**
* 搜尋得到結果時
*
*/
private function onNotify_result(notification:INotification):void{
//從 Notification 中取得搜尋結果
app.txtResult.text = notification.getBody()["result"];
}
/**
* 設定UI的事件處理
* @param tf
*
*/
private function setListener(tf:Boolean):void{
if(tf){
app.btnSearch.addEventListener(MouseEvent.CLICK, onBtnSearchClick);
}else{
app.btnSearch.removeEventListener(MouseEvent.CLICK, onBtnSearchClick);
}
}
/**
* 按下搜尋按鈕時
* @param e
*
*/
private function onBtnSearchClick(e:MouseEvent):void{
var body:Object = {};
body["keyword"] = app.txtSearch.text;
//通知 發生 NOTIFICATION_SEARCH,並且將搜尋字串夾帶在 Notification 中
this.facade.sendNotification(ApplicationFacade.NOTIFICATION_SEARCH, body);
}
}
}
package idv.ben.test1.controller
{
import idv.ben.test1.model.DataProxy;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class SearchCommand extends SimpleCommand implements ICommand
{
public function SearchCommand()
{
super();
}
override public function execute(notification:INotification):void
{
//由 Notification 中可以取得搜尋字串
var searchString:String = notification.getBody()["keyword"];
//開始搜尋
search(searchString);
}
private function search(searchString:String):void{
//透過 DataProxy 進行查詢
var dataProxy:DataProxy = DataProxy(this.facade.retrieveProxy(DataProxy.PROXY_NAME));
dataProxy.search(searchString);
}
}
}
package idv.ben.test1.model
{
import idv.ben.test1.ApplicationFacade;
import org.puremvc.as3.interfaces.IProxy;
import org.puremvc.as3.patterns.proxy.Proxy;
public class DataProxy extends Proxy implements IProxy
{
static public const PROXY_NAME:String = "DataProxy";
public function DataProxy()
{
super(PROXY_NAME, "");
}
public function search(searchString:String):void{
//假設搜尋結果是此刻時間
var result:String = (new Date()).toString();
//通知 發生 NOTIFICATION_RESULT
var body:Object = {};
body["result"] = result;
this.facade.sendNotification(ApplicationFacade.NOTIFICATION_RESULT, body);
}
}
}
今天晚上台灣 Adobe 舉辦第一屆部落客聚會,一些老朋友如 Brian、火星人、阿修、Ticore、小正正、Maso、Erin、奶綠...等人,都有受邀參加。
主人有準備俗稱 "天使之鈴" 的法國小點心,那是一種外殼脆脆硬硬的,咬破後裡面很鬆軟,但又沒有小林煎餅的吊鐘燒那麼軟,仍帶有蛋糕蓬鬆的口感。
開場白由台灣區的頭頭 Will 做介紹,有位網友當場問了他一個問題:這場聚會的主要目的?未來是否有更多的聯繫(Adobe 與使用者)?不過,不知道是我實在不太專心,或是 Will 也沒回答出甚麼有具體明確的答案,我印象中這次的聚會還是純粹將大家聚一聚、哈拉一下罷了。
Adobe User Group 的老朋友們很久沒見了,也藉著這次機會可以聚聚聊聊。
行銷經理-法蘭 有帶著各部落客參觀辦公室,以下是參觀影片:
台灣Adobe第一屆部落客聚會 from Ben Chang on Vimeo.
這兩天在玩 Evony (http://www.evony.com/),其實注意到這個遊戲已經很久了,因為最近在各個 Google Reader 中訂閱的 RSS 中,不斷出現他的廣告,所以我終於禁不住好奇加入玩玩看。
這是一款 Web 版的多人線上遊戲,遊戲內容類似世紀帝國的模式,打造自己的國家、採集資源、攻城掠地等等。有意思的是,你不用一值待在電腦前面,只要稍做設定 (建造、生產...),即使你關掉瀏覽器離開網站,伺服器也仍會依照實際時間來完成你所設定的工作。
像這類的遊戲,還有以下幾個:
Travian (http://www.travian.tw/)
IKARIAM (http://www.ikariam.tw/)
回到 Evony,以下有些截圖:
城鎮中,可建造多種不同功能的建築物,主要的政治、行政作業,都是在市政中心處理:
學院,可學習各種工程技術,以加速各種作業的速度:
兵營,可在此開始雇用不同種類的傭兵:
城鎮外,建立四種不同資源的採集場,每次升級都需要不同的資源數量才行:
世界地圖,可以看到玩家城市周邊的其他地形,或其他玩家的城市,可決定是否要探索或攻城掠地:
左下角有些功能面板,其中最常需要開啟瀏覽的就是任務面板,初期的目標就是仰賴不斷的完成任務來獲得不同的資源:
玩家也可以從統計表中看到自己在所在伺服器中的排名,也包括了聲望值與人口數等,不過統計表中的數值與玩家右邊的面板資料有點不太同步:
從統計表來看,共有 10 筆 x 4631 頁 = 約 46300 個玩家,而我才玩一天多一點,已經達到前 20 名了,遊戲過程中不斷會有玩家詢問:"how to play?",可見得玩到一半就放棄的人應該佔大多數吧!
前兩天遇到一個非常詭異的錯誤訊息:
"TypeError: Error #1007: 嘗試個體化非建構函式。"
若用 google 去查的話,可以找到一堆與 Document Class 相關的議題,不過這次我遇到的可不是那樣的問題。事實上,我遇到的問題正如他的錯誤訊息一樣的清楚,只不過難以發覺。
以下,我先準備一個我簡化過的問題案例:
Test.fla 的 Document Class 為 Test.as
package{
import flash.display.MovieClip;
import a.Vector;
public class Test extends MovieClip{
var v:Vector = new Vector();
public function Test(){
trace(123, v);
}
}
}
package a{
public class Vector{
public function Vector(){
trace("Vector!!");
}
}
}
package{
import flash.display.MovieClip;
import a.Vector;
public class Test extends MovieClip{
var v:a.Vector = new a.Vector();
public function Test(){
trace(123, v);
}
}
}
標籤: AS3, Flash, Flash Player
這兩天在研究如何將文字資訊隱藏在圖片中的技術,在 google 查了一些 "secure image sharing" 的資料,但是都沒有看到實作的方法(其實是沒有看到範例程式碼),最後,我參考 Wiki 上關於 Steganography 的介紹:
http://en.wikipedia.org/wiki/Steganography
寫了以下的類別:
Steganography.as
package idv.ben.steganography
{
import flash.display.BitmapData;
import flash.geom.Point;
public class Steganography
{
static private var __instance:Steganography;
static public function getInstance():Steganography{
if(__instance==null)
__instance = new Steganography();
return __instance;
}
private var __totalWidth:int;
private var __totalHeight:int;
private var __point:Point;
public function Steganography()
{
if(__instance!=null)
throw new Error("plz use Steganography.getInstance()");
}
public function encode(oBD:BitmapData, txt:String):BitmapData{
var txtLen:int = txt.length;
var txtLenLen:int = String(txtLen).length;
if(oBD.width * oBD.height < txtLen + 10)
return null;
var newBD:BitmapData = oBD.clone();
__totalWidth = newBD.width;
__totalHeight = newBD.height;
__point = null;
var c:String;
var p:Point;
var newPixel:uint;
//txtLenLen
c = String(txtLenLen);
p = getNextPoint();
newPixel = putCharIntoPixel(c, oBD.getPixel(p.x, p.y));
newBD.setPixel(p.x, p.y, newPixel);
//txtLen
for(var i:int=0; i<txtLenLen; i++){
c = String(txtLen).substr(i, 1);
p = getNextPoint();
newPixel = putCharIntoPixel(c, oBD.getPixel(p.x, p.y));
newBD.setPixel(p.x, p.y, newPixel);
}
//txt
for(var j:int=0; j<txtLen; j++){
c = txt.substr(j, 1);
p = getNextPoint();
newPixel = putCharIntoPixel(c, oBD.getPixel(p.x, p.y));
newBD.setPixel(p.x, p.y, newPixel);
}
return newBD;
}
public function decode(bd:BitmapData):String{
__totalWidth = bd.width;
__totalHeight = bd.height;
__point = null;
var txtLenLen:int;
var txtLen:int
var txt:String = "";
var p:Point;
var c:String;
//txtLenLen
if(bd.width * bd.height <= 0)return "";
p = getNextPoint();
c = getCharFromPixel(bd.getPixel(p.x, p.y));
txtLenLen = int(c);
//txtLen
if(bd.width * bd.height <= (1 + txtLenLen))return "";
var strTxtLen:String = "";
for(var i:int=0; i<txtLenLen; i++){
p = getNextPoint();
c = getCharFromPixel(bd.getPixel(p.x, p.y));
strTxtLen += c;
}
txtLen = int(strTxtLen);
//txt
if(bd.width * bd.height <= (1 + txtLenLen + txtLen))return "";
for(var j:int=0; j<txtLen; j++){
p = getNextPoint();
c = getCharFromPixel(bd.getPixel(p.x, p.y));
txt += c;
}
return txt;
}
private function getNextPoint():Point{
if(__point==null){
__point = new Point(0, 0);
}else{
if(__point.x < __totalWidth-1){
__point.x++;
}else{
__point.x = 0;
__point.y++;
}
}
return __point;
}
private function putCharIntoPixel(char:String, oPixel:uint):uint{
var r:uint = (oPixel >> 16) & 255;
var g:uint = (oPixel >> 8) & 255;
var b:uint = (oPixel >> 0) & 255;
var charCode:String = String(char.charCodeAt(0));
while(charCode.length<3)
charCode = "0" + charCode;
var dr:uint = uint(charCode.substr(0, 1));
var dg:uint = uint(charCode.substr(1, 1));
var db:uint = uint(charCode.substr(2, 1));
var r2:uint = ((r >> 4) << 4) | dr;
var g2:uint = ((g >> 4) << 4) | dg;
var b2:uint = ((b >> 4) << 4) | db;
return r2 << 16 | g2 << 8 | b2;
}
private function getCharFromPixel(pixel:uint):String{
var dr:uint = (pixel >> 16) & 15;
var dg:uint = (pixel >> 8) & 15;
var db:uint = (pixel >> 0) & 15;
var charCode:String = String(dr) + String(dg) + String(db);
var char:String = String.fromCharCode(int(charCode));
return char;
}
}
}
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import idv.ben.steganography.Steganography;
public class SteganographyAS3 extends Sprite
{
[Embed(source='../asset/IMG_3641.jpg', mimeType='image/jpeg')]
public var Img:Class;
public function SteganographyAS3()
{
var bmp:Bitmap = new Img() as Bitmap;
bmp.scaleX = bmp.scaleY = 0.5;
this.addChild(bmp);
var msg:String = "hello world!!";
var newBD:BitmapData = Steganography.getInstance().encode(bmp.bitmapData, msg);
var newBMP:Bitmap = new Bitmap(newBD);
newBMP.x = bmp.x + bmp.width;
newBMP.scaleX = newBMP.scaleY = 0.5;
this.addChild(newBMP);
var msg2:String = Steganography.getInstance().decode(newBMP.bitmapData);
trace("decode=>", msg2);
}
}
}


package
{
import com.adobe.images.PNGEncoder;
import fl.containers.ScrollPane;
import fl.controls.Button;
import fl.controls.TextArea;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.utils.ByteArray;
import flash.utils.setTimeout;
import idv.ben.steganography.Steganography;
public class Demo2 extends MovieClip
{
public var btnBrowse:Button;
public var btnEncode:Button;
public var btnSave:Button;
public var btnLoad:Button;
public var btnDecode:Button;
public var spImg:ScrollPane;
public var spImg2:ScrollPane;
public var txtInput:TextArea;
public var txtOutput:TextArea;
private var __fileReference:FileReference = new FileReference();
private var __fileReference2:FileReference = new FileReference();
public function Demo2()
{
btnBrowse.addEventListener(MouseEvent.CLICK, onBtnBrowseClick);
btnEncode.addEventListener(MouseEvent.CLICK, onBtnEncodeClick);
btnSave.addEventListener(MouseEvent.CLICK, onBtnSaveClick);
btnLoad.addEventListener(MouseEvent.CLICK, onBtnLoadClick);
btnDecode.addEventListener(MouseEvent.CLICK, onBtnDecodeClick);
__fileReference.addEventListener(Event.SELECT, onFileReferenceSelect);
__fileReference.addEventListener(Event.COMPLETE, onFileReferenceComplete);
__fileReference2.addEventListener(Event.SELECT, onFileReference2Select);
__fileReference2.addEventListener(Event.COMPLETE, onFileReference2Complete);
}
private function onBtnBrowseClick(e:MouseEvent):void{
trace("onBtnBrowseClick()");
var typeFilter:Array = [new FileFilter("Images(*.jpg;*.gif;*.png)", "*.jpg;*.gif;*.png")];
__fileReference.browse(typeFilter);
}
private function onBtnEncodeClick(e:MouseEvent):void{
trace("onBtnEncodeClick()");
var bd:BitmapData = getEncodedBitmapData(spImg);
if(bd == null)
return;
var txt:String = txtInput.text;
if(txt == "")
return;
var newBD:BitmapData = Steganography.getInstance().encode(bd, txt);
var newBMP:Bitmap = new Bitmap(newBD);
spImg2.source = newBMP;
setTimeout(spImg2.update, 200);
}
private function onBtnSaveClick(e:MouseEvent):void{
trace("onBtnSaveClick()");
var bd:BitmapData = getEncodedBitmapData(spImg2);
if(bd == null)
return;
var data:ByteArray = PNGEncoder.encode(bd);
var fr:FileReference = new FileReference();
fr.save(data, "EncodeImage.png");
}
private function onBtnLoadClick(e:MouseEvent):void{
trace("onBtnLoadClick()");
var typeFilter:Array = [new FileFilter("Images(*.jpg;*.gif;*.png)", "*.jpg;*.gif;*.png")];
__fileReference2.browse(typeFilter);
}
private function onBtnDecodeClick(e:MouseEvent):void{
trace("onBtnDecodeClick()");
var bd:BitmapData = getEncodedBitmapData(spImg2);
if(bd == null)
return;
var txt:String = Steganography.getInstance().decode(bd);
txtOutput.text = txt;
}
private function onFileReferenceSelect(e:Event):void{
trace("onFileReferenceSelect()");
__fileReference.load();
}
private function onFileReferenceComplete(e:Event):void{
trace("onFileReferenceComplete()");
var data:ByteArray = __fileReference.data;
var loader:Loader = new Loader();
loader.loadBytes(data);
spImg.source = loader;
setTimeout(spImg.update, 200);
}
private function onFileReference2Select(e:Event):void{
trace("onFileReference2Select()");
__fileReference2.load();
}
private function onFileReference2Complete(e:Event):void{
trace("onFileReference2Complete()");
var data:ByteArray = __fileReference2.data;
var loader:Loader = new Loader();
loader.loadBytes(data);
spImg2.source = loader;
setTimeout(spImg2.update, 200);
}
private function getEncodedBitmapData(sp:ScrollPane):BitmapData{
if(sp.content == null)
return null;
var bmp:Bitmap;
if(sp.content is Loader){
if(Loader(sp.content).content == null)
return null;
bmp = Bitmap(Loader(sp.content).content);
}else if(sp.content is Bitmap){
bmp = Bitmap(sp.content);
}else{
return null;
}
return bmp.bitmapData;
}
}
}
標籤: AS3, BitmapData, Flash, Security, Steganography
如果貴公司的 Flash 平台的開發方式也是:用 Flash IDE 製作畫面,但邏輯程式都用外部 AS Code Editor(筆記本、Flex Builder、Flash Develop...)來編輯 *.as 的話,你一定會遇到一些命名問題,在 *.as 想要使用的某些類別名稱 是來自於 *.fla 中 Library 定義(匯出)的類別,當然我們可以使用 getDefinitionByName() 或其他方式來將指定字串變成想要的類別 進而產生實體,不過只要一個不注意的話,就很容易出錯並 debug 到死~尤其若是有使用擾亂器(obfuscator,一種將 *.swf 內部的程式碼改變其命名、定義...等程式碼的工具,目的是讓反組譯出來的原始碼不易閱讀)的話,恐怕那更會是一個災難。
這裡有一篇文章:http://www.airtightinteractive.com/news/?p=327
他建議我們可以將 *.fla 的素材以匯出 *.swc 的方式,來提供給 flex builder 使用,這樣當 flex builder 的 AS Project 引用這些 *.swc 時,就可以正確的找到實際存在的類別名稱。
不知道若是有使用擾亂器的話,是否仍可具有相同的優勢,不過對於一般開發的話,這種做法確實應該會比較保險一點,讓 *.fla 與 *.as 能更同步一些!
標籤: Flash, Flex Builder, SWC
以下有六段教學影片,教你如何使用 Adobe Mobile Packaging 來將你開發的 Flashlite 程式打包、佈署到 Symbian 或 Windows Mobile 平台上。
http://www.myersdesign.com/wordpress/?p=311
01 Overview
http://tv.adobe.com/#vi+f15313v1005
02 Set-up Your Computer
http://tv.adobe.com/#vi+f15313v1000
03 Making Your First Packages
http://tv.adobe.com/#vi+f15313v1007
04 Symbian Signing
http://tv.adobe.com/#vi+f15313v1003
05 Windows Mobile Signing
http://tv.adobe.com/#vi+f15313v1008
06 Icon Boot Camp
http://tv.adobe.com/#vi+f15313v1006