Skip to main content

AIR : 蕭可愛面板之FLV player v1.0



最近很喜歡的聲音:蕭敬騰,沒辦法他那首「世界唯一的妳」給我的震撼真的很大 (當然他當初出場的髮型也很爆點),生平第一次變成追星族(已經夠低調的那種...XD)的感覺真的很有趣,由於前些日子下載了一堆youtube的FLV影片,但是線上FLV影片常常是一部影片被切成好幾段,所以播放器最好有清單功能以便順序播放,又剛好下載的幾乎都是蕭可愛的影片...跟AS3也不夠熟,還想繼續玩AIR,考慮結果當然是自己來寫嚕!

安裝:
  1. 若你沒安裝過 AIR 請事先安裝好Adobe AIR Beta 2(今天才release的)主體 ,這樣以後只要點選 .air 檔案即可自動安裝。(只需要裝一次喔!,裝過就等著升級就好,有舊版的請先移除再安裝)
  2. 下載Jam FLV Player.air (已經是Beta2版本嚕!)
  3. 執行 Jam FLV Player.air 選擇你想要的安裝路徑,預設為:C:\Documents and Settings\使用者名稱\Local Settings\Application Data\Jam FLV Player

建議將.air檔案收集在同一個資料夾中,可以當作quick launch與uninstall的捷徑

使用說明:

Double-click面板可以開啟menu,共有以下幾種:

  1. 開啟檔案 - 選擇.flv直接播放
  2. 播放清單 - 新增與載入
    編輯後都需要「save」才會更新,但是只要在list上面的清單,都可以順序播放,所以如果只需要暫時的播放清單,點選「新增清單」後編輯去播放即可。載入的上一筆清單會出現在「新增清單」的選項下面,清單儲存副檔名為.jam...(XD當然要用蕭可愛的英文名字命名了!)

感謝 蕭敬騰國際論壇.蕭幫的claire.chiu拍的照片~~

分享給同樣喜歡蕭可愛的你~~~

Comments

Popular posts from this blog

PureMVC 我也會 [0]

最近感覺 PureMVC 又熱了起來,也剛好好久沒有更新文章了, 就順便將去年底做的企業內訓 PureMVC 課程部分整理寫出來, 要講 PureMVC 當然要先從啥是 MVC 講起: Model-View-Control 出處: 維基百科 MVC ,大概節錄一段: (控制器Controller)- 負責轉發請求,對請求進行處理。 (檢視View) - 介面設計人員進行圖形介面設計。 (模型Model) - 程式設計師編寫程式應有的功能(實作算法等等)、數據庫專家進行資料管理和數據庫設計(可以實作具體的功能)。 其實到 Flash 的世界來講,Model and Control 都是由 .as 處理,而 View 便是 .fla+.as ,為了要鬆綁之間的關係,Event 機制就相當重要。其實每個人對 MVC 的最佳解釋都不同,真的要多練習才會有所領悟。 簡單來說: Model = 餐廳廚房 data: 西餐類 action:依照點菜單做餐點 action: 做完餐點就是將餐點放在出菜口按下通知鈴等服務生來 Control = 服務生 action: 聽到大門歡迎鈴就要說「歡迎光臨」 action: 看到客人揮揮手要去收點菜單 action: 聽到廚房通知鈴看是哪桌的餐點去送菜 View = 餐廳外場 view: 田園式的西餐廳裝潢 action: 客人進門會有歡迎鈴 action: 客人揮揮手叫服務生過來服務,是哪個服務生都無所謂,重點只要會收點菜就行了。 action: 客人收到餐點準備開動 當餐廳要改成外炒店,這時候只需要將大廚換成會中餐廚師,其出的菜就是中式快炒。 當餐廳外場由田園式外觀重新裝潢成華麗感夜店風,其進門的客層也會有所不同。 重點就是當你換掉一個地方時,對其它的部份不會造成太大的影響或者根本無所謂,這就是 MVC 所講求的境界... 一般來說,小專案有沒有必要使用 MVC 就是由各位自己判斷了,當你習慣將程式切分開來,發現 debug 不是一件痛苦的事情時,這時候有沒有強制使用 MVC 倒不是重點,因為你已經養成良好的撰寫習慣。但是開始接觸大型專案配合 team work 時,在沒有一個共用的核心框架前提下,這個專案開發到最後一定會是一個多手多腳的怪物,共用核心框架的價值就在這邊展現,這

[Swift3] weak 與 unowned 關鍵字

雖然在 Swift 中看起來"很像"是不需要煩惱內存管理的問題,不過實際上它還是遵循著自動引用計數 (ARC) 的規則,當一個物件沒有被其他對象引用時會自動被銷毀,如果三魂七魄沒有完全回位的話,就會有個靈體留在現世的空間裡,最經典的範例如下: 閉包(Closure)引用 classClassA { typealias Complete = ()->() var name : String var onComplete : Complete? init(_ name: String){ self.name = name print("Hello I am \(self.name)") onComplete = { print("\(self.name): onComplete!") // --> 閉包引用 self, 計數 + 1 } } deinit { print("deinit: \(self.name)") } } var a : ClassA? = ClassA("A") // --> 引用計數 + 1 a = nil // 2-1 = 1 還剩下 1 所以沒辦法銷毀 ---output------- Hello I am A 由於這邊的 onComplete 宣告為 Optional, 正確的做法要連同 onComplete 一起刪除才可以被回收,若不是 Optional 則會進入無法回收狀態: var b : ClassA? = ClassA("B") b?.onComplete = nil // --> 還好是 Optional 可以設成 nil 計數 - 1 b = nil // 計數 = 0 所以被回收 ---output------- Hello I am B deinit: B 但是做人不需要煩惱太多,這時候就出動 unowned 關鍵字讓物件可以順利被回收: onComplete = { [unowned self] in print