搜尋部落格文章

2013年4月23日 星期二

[轉] AS3 老鳥之路



  1. 理解flash的顯示列表
  2. 理解事件冒泡,理解滑鼠事件等
  3. 理解flash的性能瓶頸和大多數影響性能的地方
  4. 理解影格跑道模型,知道timer和enterFrame的關聯和區別
  5. 理解RSL(runtime share lib)和loader的applactiondoamin以及多模塊開發/運行的優勢
  6. 理解反射,類別定義,庫鏈接定義
  7. 理解常用數學公式
  8. 理解圖形圖像和多媒體原理,會處理圖形圖像
  9. 理解動畫原理和影格,刷新的概念
  10. 理解小數點坐標和整數坐標點區別,flash最小坐標區間以及各種坐標變換
  11. 理解flash重繪區域和內部的運行規則
  12. 理解BitmapData,copyPixel和Blit以及Blit適用的地方,原理
  13. 理解BitmapData常用操作,如:濾鏡,通道拷貝等
  14. 理解BitmapData的內存共享和釋放,引用,垃圾回收(強制GC)
  15. 理解對像池
  16. 理解Socket和二進制操作
  17. 理解flash裡的聲音控制以及聲音二進制處理/獲取
  18. 理解怎麼和美術配和,什麼樣的東西能在表現和性能之間取得平衡
  19. 理解點陣圖和向量圖的差別以及點陣圖緩存、
  20. 理解MousEnable和mouseChildren和常用的濾鏡操作HSB等
  21. 理解AStar和路徑優化
  22. 理解Avatar原理
  23. 理解地圖和戰鬥機制和代碼,會做高性能的多人同步地圖
  24. 會控制操作界面
  25. 會平滑處理CPU避免峰值卡影格和優化實際運行性能,會內存換cpu,cpu換內存
  26. 理解UI製作和UI組件製作
  27. 理解如何使用flashAPI以及迅速掌握新出功能
  28. 理解網路坐標/數據同步,巡航算法
  29. 理解AIR和Flex,會使用Flex快速開發出項目中使用的工具
  30. 理解flash顯示原理,臟矩形算法
  31. 理解flash常用顯示對像操作
  32. 理解ObsServer設計模式和事件模型原理
  33. 理解二維矩陣和三維矩陣變換
  34. 理解手機開發和部署AIR 
  35. 會使用一個3D引擎/框架
  36. 理解3D原理,理解顯卡基本原理
  37. 理解MVC思想,理解23種常用設計模式
  38. 理解OOP和面向過程,結構化程序的各自優勢
  39. 理解PNG8 ,PNG32,JPG,JPG-XR,H264,AAC,MP3,flash語音編碼
  40. 理解FMS和FMS相關操作類別
  41. 理解安全沙箱
  42. 深入研究各種算法,程序原理,設計方法
  43. 理解下載多線程,下載單線程,AS多線程以及Worker應用範圍
  44. 理解Debug,導出工程,斷點。
  45. 理解內存分析和性能分析以及優化
  46. 理解如何將一個大系統分解成多個子系統,子模塊以及如何合併
  47. 會需求分析,程序邏輯分析,系統分析,項目組織
  48. 掌握敏捷開發和迭代開發,提高開發效率,適應功能需求變化
  49. 理解測試和bug處理,理解團隊開發之間合作
  50. 會使用tweenMax等第三方類別庫,會開發類別庫
  51. 理解接口,繼承,組合封裝的作用
  52. 理解CDN和沙箱問題,常見網路知識,客戶端文件部署,更新操作版本控制
  53. SVN版本控制
  54. 理解領域知識,理解遊戲
  55. 理解SWC的作用(導出代碼,UI界面,資源等,以及配合RSL)
  56. 會使用自動構建界面/UI組件技術
  57. 理解煉金術,會從C/ C++傳統遊戲開發中學習經驗技巧甚至代碼
  58. 會掌控一個項目以及解決項目中出現的任何(注意這個詞)技術問題
  59. 會開發一個項目專用框架,會封裝項目底層
  60. 會製作一個遊戲2D/3D引擎
  61. 掌握獨立學習鑽研的方法。
  62. 做事情(寫程序)要有效率,並且穩定。
  63. 相信自己可以比別人做得更好並努力去做。
  64. 保持快樂心態並成為多面手,提高綜合素質和能力(不僅限於編程)



外部載入執行階段共享資源swf相關設定

以前製作專案剛開始,都會把圖像字體直接放入主要檔案的元件庫中
這樣會造成檔案體積越來越大
有一種做法就是將這些圖像元件拉到外部swf中,在程式初始化預先載入
隨後利用ApplicationDomain.currentDomain.getDefinition(元件類別名稱)存取
請讓自己養成習慣,以往存取元件的方式,請用上列方式取代

  • 程式中直接建構實體。
  • new AClass();
  • 盡量減少使用Flash IDE創建的元件,盡可能的使用類別。

載入外部swf的注意事項
主要swf與被載入的swf所屬同網域
請替Loader增加
LoaderContext.applicationDomain=ApplicationDomain.currentDomain;
其他用法:對於要使用何種 ApplicationDomain 屬性,您有下列四種選擇:

  • 載入器之 ApplicationDomain 的子系。預設值。 您可以使用 new ApplicationDomain(ApplicationDomain.currentDomain) 語法明確表示這項選擇。 這樣會允許載入的 SWF 檔直接使用父輩的類別,例如藉由撰寫 new MyClassDefinedInParent()。 然而,父輩卻無法使用此語法。如果父輩希望使用子系的類別,便必須呼叫 ApplicationDomain.getDefinition() 以擷取這些類別。 這項選擇的優點在於,如果子系定義之類別的名稱,與父輩已定義的類別相同,並不會造成錯誤,子系將會直接繼承父輩對於該類別的定義,而且除非子系或父輩呼叫 ApplicationDomain.getDefinition() 方法以擷取定義,否則都不會使用到子系的衝突定義。
  • 載入器自己的 ApplicationDomain。您可以在使用 ApplicationDomain.currentDomain 時,使用此應用程式網域。 當載入完成時,父輩和子系都可直接使用彼此的類別。 如果子系嘗試定義的類別與父輩已經定義的類別同名,就使用父類別,忽略子類別。
  • 系統 ApplicationDomain 的子系。您可以在使用 new ApplicationDomain(null) 時,使用此應用程式網域。 這樣會完全分隔載入器和載入對象,允許兩者以相同的名稱定義不同的類別,而不會造成衝突或遮蓋。 兩端都能看到另一端之類別的唯一方式,便是呼叫ApplicationDomain.getDefinition() 方法。
  • 某些其它 ApplicationDomain 的子系。有時候,您可能會擁有更複雜的 ApplicationDomain 階層。 您可以從自己的 SecurityDomain,將 SWF 檔載入任何 ApplicationDomain。 例如,new ApplicationDomain(ApplicationDomain.currentDomain.parentDomain.parentDomain) 會將 SWF 檔載入至目前網域之祖父輩 (父輩的父輩) 的新子系中。
當載入完成時,任一端 (載入或被載入者) 都可能因為呼叫 ApplicationDomain.getDefinition() 的目的,而需要尋找自己的 ApplicationDomain,或是另一端的 ApplicationDomain。 任一端都可以使用 ApplicationDomain.currentDomain 來擷取或參照自己的應用程式網域。 載入的 SWF 檔可以透過 Loader.contentLoaderInfo.applicationDomain,擷取載入之 SWF 檔的 ApplicationDomain 參照。 如果遭載入的 SWF 檔知道本身載入的方式,便會知道如何找到執行載入之 SWF 檔的 ApplicationDomain 物件。 例如,如果子系是以預設方式載入,即可使用 ApplicationDomain.currentDomain.parentDomain,找到載入之 SWF 檔的應用程式網域。

主要swf與被載入的swf非屬同網域
請替Loader增加
LoaderContext.securityDomain = SecurityDomain.currentDomain;



[轉] allowScriptAccess與allowNetworking的用法介紹



AllowScriptAccess用法sameDomain:僅當SWF 文件和網頁位於同一域中時才允許執行外出腳本訪問。這是AVM2 內容的默認值。never:外出腳本訪問將始終失敗。always:外出腳本訪問將始終成功

剛才遇到前台發來的一個消息,一個蓮花鐘模塊總是彈出頁面,查了一下,發現這個模塊是很早以前就已經審核通過了,以前沒有發生過問題,看來是flash文件被人修改了。問了一下其他人,如何在不修改flash本身的情況下,禁止彈出窗口,果然是有方法,就是引用的時候設置一下allowNetWorking="none" allowScriptAccess="never"就行了。又學了一招。

  到網上找了一份介紹這兩個屬性的資料,貼在這裡做個備忘

  1,AllowScriptAccess

  參數:

  sameDomain:僅當SWF文件和網頁位於同一域中時才允許執行外出腳本訪問。這是AVM2內容的默認值。
  never:外出腳本訪問將始終失敗。
  always:外出腳本訪問將始終成功。

  AllowScriptAccess參數可以防止從一個域中承載的SWF文件訪問來自另一個域的HTML頁面中的腳本。
  對從另一個域承載的所有SWF文件使用AllowScriptAccess="never"可以確保位於HTML頁面中的腳本的安全性。


2,allowNetworking 参数: all(默认值)― SWF 文件中允许使用所有网络 API。 internal― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。 none― SWF 文件可能不调用浏览器导航或




  2,allowNetworking

  参数:

  "all"(默认值)― SWF 文件中允许使用所有网络 API。
  "internal"― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。
  "none"― SWF 文件可能不调用浏览器导航或浏览器交互 API,并且它无法使用任何 SWF 到 SWF 通信 API。

  可以控制 SWF 文件对网络功能的访问。调用被禁止的 API 会引发 SecurityError 异常。

  当 allowNetworking 设置为 "internal" 时,以下 API 被禁止:

  navigateToURL()
  fscommand()
  ExternalInterface.call()

  当 allowNetworking 设置为 "none" 时,除了上面列出的那些 API 外,还会禁止以下 API:

  sendToURL()
  FileReference.download()
  FileReference.upload()
  Loader.load()
  LocalConnection.connect()
  LocalConnection.send()
  NetConnection.connect()
  NetStream.play()
  Security.loadPolicyFile()
  SharedObject.getLocal()
  SharedObject.getRemote()


  Socket.connect()


3,allowFullScreen 參數: 啟用全屏模式設置為true,否則設置為false(默認值) 僅當在響應鼠標事件或鍵盤事件時才會調用啟動全屏模式的ActionScript。如果在其它情況中調用,Flash Player 會引發異常。在全屏模




  3,allowFullScreen

  參數:

  啟用全屏模式設置為"true",否則設置為"false"(默認值)
  僅當在響應鼠標事件或鍵盤事件時才會調用啟動全屏模式的ActionScript。如果在其它情況中調用,Flash Player會引發異常。
  在全屏模式下,用戶無法在文本輸入字段中輸入文本。所有鍵盤輸入和鍵盤相關的ActionScript在全屏模式下均會被禁用,但將應用程序返回標準模式的鍵盤快捷鍵(例如按Esc)除外。
  當內容進入全屏模式時,程序會顯示一條消息,指導用戶如何退出和返回標準模式。該消息將顯示幾秒鐘,然後淡出。
  如果某個調用方與Stage所有者(主SWF文件)沒有位於同一安全沙箱,則調用Stage對象的displayState屬性會引發異常。
  管理員可以通過在mms.cfg文件中設置FullScreenDisable = 1對瀏覽器中運行的SWF文件禁用全屏模式。
  在瀏覽器中,必須在HTML頁面中包含SWF文件,才能進入全屏模式。
  在獨立的播放器或放映文件中始終允許全屏模式。(水中的魚)
< object classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

codebase = "http://download.macromedia.com/pub/shockwave/cabs/ flash/swflash.cab#version=9,0,28, 0"

width = "100%" height = "100%" >
< param name = "movie" value = "falsh.swf" />
< param name = "quality" value = "high" />
< param name = "AllowScriptAccess" value = "sameDomain" />
< param name = "allowNetworking" value = "all" />
< param name = "allowFullScreen" value = "true" />
< embed src = "falsh.swf" width = "100%" height = "100%" quality = "high"

pluginspage = "http://www.adobe.com/shockwave/download/download.cgi? P1_Prod_Version=ShockwaveFlash "

type = "application/x-shockwave-flash"

allowscriptaccess = "sameDomain" allownetworking = "all"

allowfullscreen = "true" > </ embed >
</ object >


 AllowScriptAccess用法sameDomain:僅當SWF 文件和網頁位於同一域中時才允許執行外出腳本訪問。這是AVM2 內容的默認值。never:外出腳本訪問將始終失敗。always:外出腳本訪問將始終成功
剛才遇到前台發來的一個消息,一個蓮花鐘模塊總是彈出頁面,查了一下,發現這個模塊是很早以前就已經審核通過了,以前沒有發生過問題,看來是flash文件被人修改了。問了一下其他人,如何在不修改flash本身的情況下,禁止彈出窗口,果然是有方法,就是引用的時候設置一下allowNetWorking="none" allowScriptAccess="never"就行了。又學了一招。
  到網上找了一份介紹這兩個屬性的資料,貼在這裡做個備忘
  1,AllowScriptAccess
  參數:
  sameDomain:僅當SWF文件和網頁位於同一域中時才允許執行外出腳本訪問。這是AVM2內容的默認值。
  never:外出腳本訪問將始終失敗。
  always:外出腳本訪問將始終成功。
  AllowScriptAccess參數可以防止從一個域中承載的SWF文件訪問來自另一個域的HTML頁面中的腳本。
  對從另一個域承載的所有SWF文件使用AllowScriptAccess="never"可以確保位於HTML頁面中的腳本的安全性。

2,allowNetworking 参数: all(默认值)― SWF 文件中允许使用所有网络 API。 internal― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。 none― SWF 文件可能不调用浏览器导航或
  2,allowNetworking
  参数:
  "all"(默认值)― SWF 文件中允许使用所有网络 API。
  "internal"― SWF 文件可能不调用浏览器导航或浏览器交互 API,但是它会调用任何其它网络 API。
  "none"― SWF 文件可能不调用浏览器导航或浏览器交互 API,并且它无法使用任何 SWF 到 SWF 通信 API。
  可以控制 SWF 文件对网络功能的访问。调用被禁止的 API 会引发 SecurityError 异常。
  当 allowNetworking 设置为 "internal" 时,以下 API 被禁止:
  navigateToURL()
  fscommand()
  ExternalInterface.call()
  当 allowNetworking 设置为 "none" 时,除了上面列出的那些 API 外,还会禁止以下 API:
  sendToURL()
  FileReference.download()
  FileReference.upload()
  Loader.load()
  LocalConnection.connect()
  LocalConnection.send()
  NetConnection.connect()
  NetStream.play()
  Security.loadPolicyFile()
  SharedObject.getLocal()
  SharedObject.getRemote() 
  Socket.connect() 

3,allowFullScreen 參數: 啟用全屏模式設置為true,否則設置為false(默認值) 僅當在響應鼠標事件或鍵盤事件時才會調用啟動全屏模式的ActionScript。如果在其它情況中調用,Flash Player 會引發異常。在全屏模
  3,allowFullScreen
  參數:
  啟用全屏模式設置為"true",否則設置為"false"(默認值)
  僅當在響應鼠標事件或鍵盤事件時才會調用啟動全屏模式的ActionScript。如果在其它情況中調用,Flash Player會引發異常。
  在全屏模式下,用戶無法在文本輸入字段中輸入文本。所有鍵盤輸入和鍵盤相關的ActionScript在全屏模式下均會被禁用,但將應用程序返回標準模式的鍵盤快捷鍵(例如按Esc)除外。
  當內容進入全屏模式時,程序會顯示一條消息,指導用戶如何退出和返回標準模式。該消息將顯示幾秒鐘,然後淡出。
  如果某個調用方與Stage所有者(主SWF文件)沒有位於同一安全沙箱,則調用Stage對象的displayState屬性會引發異常。
  管理員可以通過在mms.cfg文件中設置FullScreenDisable = 1對瀏覽器中運行的SWF文件禁用全屏模式。
  在瀏覽器中,必須在HTML頁面中包含SWF文件,才能進入全屏模式。
  在獨立的播放器或放映文件中始終允許全屏模式。(水中的魚)
  1. < object  classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"   codebase = "http://download.macromedia.com/pub/shockwave/cabs/ flash/swflash.cab#version=9,0,28, 0"  width = "100%"  height = "100%" >   
  2. < param  name = "movie"  value = "falsh.swf"  />   
  3. < param  name = "quality"  value = "high"  />   
  4. < param  name = "AllowScriptAccess"  value = "sameDomain"  />   
  5. < param  name = "allowNetworking"  value = "all"  />   
  6. < param  name = "allowFullScreen"  value = "true"  />   
  7. < embed  src = "falsh.swf"  width = "100%"  height = "100%"  quality = "high"   pluginspage = "http://www.adobe.com/shockwave/download/download.cgi? P1_Prod_Version=ShockwaveFlash "  type = "application/x-shockwave-flash"   allowscriptaccess = "sameDomain"  allownetworking = "all"   allowfullscreen = "true" > </ embed >   
  8. </ object > 


2013年4月11日 星期四

[轉] UML4AS

在flashBuilder安裝好uml4as以後,
我們先開啟一個專案,體驗看看uml4as對於程式撰寫的幫助在哪裡吧!

0.1 下載:http://www.uml4as.com/flower-platform/download.html

0.2 安裝:不要直接丟進eclipse或是flashBuilder中,
請選擇 Help/Install New Software.../Add/Archive... 選擇剛剛下載的jar檔案來安裝

0.3建立一個新的 flex/actionScript 專案

個人測試過,目前的版本對於flexSDK4.1以上版本的支援度還有問題,
使用flexSDK4.1以後,要修改的程式碼不會比flexSDK3.5來的少,
所以我們就選擇舊版的flex3.6SDK
至於專案的名稱就取名UMLModel

1.建立一個新的UML4AS模型
建立好flex projext以後,我們在裡面建立一個新的資料夾,
在專案上按滑鼠右鍵,選擇 New/Folder
這資料夾主要要放的檔案就是等等要設計的uml圖表.


然後我們在umlModel這資料夾按滑鼠右鍵,再選擇 New/Other/Flower Modeling Platform/UML4AS File,


這時候會跳出對話視窗,取好 UML4AS 用來放置各種不同uml圖表的專案檔,
我把這uml專案檔取名為simple-mvc

這邊要選擇和flex專案要同步的資料夾,如果沒有經過特殊修改的話,通常預設就是src這資料夾.
至於flexSDK版本只有兩種能選,一個是3.5一個是4.1,我們這裡選擇flex SDK 3.5.


選擇完成以後,專案的資料夾應該如圖所示


2.專案總管
如果沒有辦法看到上述的圖,
可以到這邊去找 Window/Show View/Other/General/Project Explorer
這和flashbuilder裡面的Package Explorer 雖然長的很像,但是實際上是不同東西的!!
不過比較快速的方式,就是直接從flashBuilder右上方直接切換 Perspective 為 Flower Moding perspective

在 Project Explorer 中,展開 simple-mvc.uml4as ,可以發現有一個 Root 的資料夾,
然後在這邊建立一個新的Class Diagram,等等就是要在這邊去做uml圖表的規劃

建立好 Class Diagram , 我取名為 Diagram-mvc,點兩下開啟他,就會直接進入uml圖表的編輯模式了.


3.uml class
我們選擇右邊的工具列的class,

然後在uml圖裡面拉一個框框,這時候會跳出對話視窗.
要注意一下class的相對位置是不是在Root.src,如果不是的話要改位置,
不然會沒辦法同步成功.

我們先做好Model這個class,然後儲存.
如果正常的話,這時候專案總管應該會出現Model.as

儲存前:

儲存後:


如果這一步正常的話,我們再繼續製作其他的class,

把simple-mvc的基本三個class都完成

4.class添加屬性與方法


打上屬性的名稱,最前面的符號
-表示private
+表示public
當然,變數後面的:要記得填入型別
我們在model裡面,設一個_totals:int的變數後,並且給他設定好set與get


然後我們再選擇右邊工具列的
設定一下彼此間的關聯關係


實際上我除了變數名稱外,其他的部分都用預設值


至於加入方法的方式和加入屬性的方式一樣,不同的只是填入的位置是下半欄


再加入方法的時候,相關參數他也會有程式碼提示.



我們再一個LabelView是用來顯示Label內容用的


選好繼承用的鍵頭,讓LabelView繼承View


一樣用拖曳的方式,拉好以後完成


目前階段,整個架構大約像這樣


5.加入已經完成的類別
雖然做好了mvc架構,不過我們還差一個主要運作的起始檔案
至於起始檔案已經有了,就是UMLModel.mxml這個檔案,
只要src原本有的class,正常情況下應該會出現在uml4as的資源當中,
只要把這檔案拖曳到uml繪製區內就可以做uml編輯了


至於設定彼此間的關聯性和之前一樣
用這鍵頭拖曳一下,寫一下變數名稱就好了!




6.不完美的uml4as
儲存完以後,我們會發現as檔案居然會出現問題.

我們仔細看一下程式碼,
原來uml4as並沒有幫我們把function的回傳值加上去,
另外美中不足的是,set get的方法,他的參數都是用預設的,
和我自己的撰寫習慣略有不同,可惜還沒有地方可以調整.

不過uml4as的uml編輯,是雙向同步的,在程式碼直接編輯的話,是可以直接同步到uml圖表中的,
不過至少simpleMVC的架構都已經完成
然後我們就繼續補完程式碼~!

當然還是可以從uml4as中去設定
比方說model的靜態事件名稱.




最終uml完成圖