2011年4月28日 星期四

FLASH網站精選431

2011年4月24日 星期日

Simple MVC for Flex4

這是以MVC概念,寫的一個簡單範例,並沒有使用如pureMVC等框架,
單純只是把相關的各種類型的程式碼做整理而已.

以這種方式來寫mvc,不但可以降低各元件的耦合性,
同時也有容易維護的優點.
不過缺點也是有,就是這種方式如果要製作複雜或是中型以上的功能,絕對沒有用框架來的方便.

m表示model
v表示view
c表示control

model的主要功能是存取資料
view的主要功能是作視覺元件的顯示
control的主要功能是做使用者的操作

在這種分類的前提下,m-v-c三者個溝通與關聯的方式就會變成
使用者操作視覺元素->control改變了model的資料->model的資料改變了,發送通知跟view說->view知道model被改變了,所以要改變相對應的顯示->使用者看到視覺元素被改變了

換另一種說法, mvc 的互動流程為 control 改變 model , model 通知 view 去做改變.

主程式碼只用來放各物件,然後宣告mvc的變數
總共有三個物件
incButton是增加數字的按鈕
decButton減少數字的按鈕
totalsLabel是顯示目前數字的文字

FlexSimpleMVC.mxml


    
        
    
    
        
    
    
    
    
    

model是用來存放資料的,
這範例中我們只有到一個資料,就是總合,
不過為了能夠更簡化,model用來通知view的Event我並沒有另外寫在其他的class,
而是直接讓model繼承了可以廣播事件的EventDispatcher,
這樣不但model可以廣播事件,同時也不會多太多沒用的功能.

Model.as
package mvc {
    import flash.events.Event;
    import flash.events.EventDispatcher;

    public class Model extends EventDispatcher {
        public static const MODEL_CHANGE:String="modelChange";//設定一個靜態字串來表示事件名稱,到時候就用這名字直接把事件打出去!!!

        private var _totals:int;//要存的資料,數字的總和

        public function Model() {
            _totals=100;//給他一個初始值100
        }
        //寫get方法,才能夠讓view拿到這數字去顯示,不過沒用到的變數就不用寫get的,不然到時候寫程式的時候,提示多一堆沒用的東西以外,還會不小心寫錯~
        public function get totals():int {
            return _totals;
        }
        //這就是重點了,當別人改變model裡面的totals這數字的時候,就發送一個事件出去,至於這事件的名字就是剛剛在最上面宣告的靜態常數字串MODEL_CHANGE
        public function set totals(value:int):void {
            _totals=value;
            dispatchEvent(new Event(Model.MODEL_CHANGE));//直接寫成"modelChange"也可以,不過這樣比較好看也不容易弄錯
        }

    }
}
model改變的時候,會發送通知給view,
至於view要怎麼知道model被改變了呢???就是利用as3的事件嚕!!
這也是為什麼剛剛要在model寫自訂事件"modelChange"的原因.

既然model會廣播MODEL.MODEL_CHANGE的事件,
所以view在設定model的時候,同時對model作MODEL.MODEL_CHANGE事件的偵聽!!

View.as
package mvc {
    import flash.events.Event;

    public class View {
        private var _model:Model;

        public function View() {
        }

        public function get model():Model {
            return _model;
        }
       //當model的變數被設定的時候,同時對model偵聽校的事件,不然一開始沒有設定model的時候偵聽的話......是在偵聽屁嗎??保證出錯給你看!!
        public function set model(value:Model):void {
            _model=value;
            _model.addEventListener(Model.MODEL_CHANGE, onModelChangeHandler);
        }

        protected function onModelChangeHandler(e:Event):void {

        }

    }
}

因為同一個model說不定會同時讓很多view去使用,所以先寫好一個主要的view,
然後其他的view再去繼承剛剛寫好的super view!!
當然還是要把視覺元件丟進去!!
LabelView.as
package mvc {
    import spark.components.Label;
    import flash.events.Event;

    public class LabelView extends View {
        private var _label:Label;
       //把Label丟進來.
        public function LabelView(pLabel:Label) {
            //super();
            _label=pLabel;
        }

       //當model改變的時候,就...改變顯示Label
        override protected function onModelChangeHandler(e:Event):void {
            _label.text=model.totals + "";//要顯示的內容是model裡面的totals變數數值
        }
    }
}
mv都寫好了,剩下c要寫.
control的主要功能是做使用者的操作,並且去改變model裡面的數值
所以,我們把controller被實體化的同時把model丟進去,
然後再去寫各種不同改變model數值的方式
Controller.as
package mvc {
    import flash.events.MouseEvent;
    import spark.components.Button;

    public class Controller {
        public var model:Model;

        public function Controller(pModel:Model) {
            model=pModel;//把model丟進來
        }

        public function addIncButton(pButton:Button):void {
            pButton.addEventListener(MouseEvent.CLICK, onIncModelHandler);//設定增加數值的按鈕,按鈕丟進來,就偵聽"click"事件,只要按下按鈕就改變model
        }

        public function addDecButton(pButton:Button):void {
            pButton.addEventListener(MouseEvent.CLICK, onDecModelHandler);
        }

        private function onIncModelHandler(e:MouseEvent):void {
            model.totals+=1;//把model的totals總數+1
        }

        private function onDecModelHandler(e:MouseEvent):void {
            model.totals-=1;//把model的totals總數-1
        }
    }
}
最後在主程式檔裡面把mvc的東西丟進去,完成!!!

FLASH網站精選427

2011年4月19日 星期二

FLASH網站精選424

資料傳遞編碼測試

編碼傳輸,這是幹麻用的呢?
前一陣子遇到一種需求,就是業主想做電子書,又怕資料在網路傳遞時被攔走,可能造成資料被別人的網站盜用...
所以這個傳遞模式應映而生...

總之先在server端,編碼後才進行傳輸,然後讀入閱讀器時才進行解碼,這樣就算中間資料被攔也是編碼過後的東西,雖說並不是完全解不了,不過也花發很多時間,想破解唯有透過字典檔才能夠解讀..


如有此需求,以上範例,可以參閱..

2011年4月18日 星期一

FLASH網站精選423

懶人系列 Flash 組件 之 GoogleMap v1.0

這個組件,可以在你的Flash裡面坎入Google地圖




組件下載

首先裝上組件(我是用cs5作的,之前的版本我就沒有試過了..)

之後重開你的Flash,按下Ctrl+F7,打開你的組件資料夾,應該會多一個Cain資料夾,裡面會有一個GoogleMap組件。
你可以直接拉到場景上,調整你要的大小
然後點選組件,調整他的參數


首先 GoogleMap Key ,這個要申請,等等在說怎麼作,現在先測試,所以隨便打幾個字,不要留空就好..
Size 是指地圖縮放尺寸, 剩下的兩個參數是指 地圖經緯度,好了之後你可以直接編譯,你應該會看到你的地圖

如果到這裡沒問題,就可以去跟Google申請一個正式使用的Key,如果這裡你沒有正確申請的話,等你把地圖放在網站上時,別人是看不到你的地圖的,所以不要偷懶,還是乖乖的去申請一個Key

申請網址

下面一點有個灰色的地方


首先打勾,然後 My web site URL 填上你的網站網址,代表這個網網站用的,所以你如果一個網站有好幾個地圖,也只要申請一個就好了。
都填好之後按下下面的申請按鈕,之後你會看到一長串的 key code 碼,把他填到組件的GoogleMap key 欄位後再輸出,就大功告成了....

其他偷懶組件

2011年4月15日 星期五

奇幻黃山 旅遊難忘安徽 台灣官方網站

依然是多災多難的網站,以後Flash的專題,請作全螢幕規格...
以免事倍工半..

2011年4月12日 星期二

FLASH網站精選419

Flv播放模組範本

請各位視覺和企劃注意,如果你的網頁上有需要撥放Flv視訊檔案,請不要在丟給我們ActionScript組了...
使用技巧已經傳授給黃大爺總子教官了,想求教可以直接找他幫忙...

為了怕大家一直忘記,在此作下筆記..


  • 如果你的網頁只是要撥一個固定的Flv檔案(傳說中的寫死),請視覺自己用flash拉一個撥放組件,大小以及屬性自己設好,輸出即可。
  • 如果你的網頁上面的Flv撥放模組要吃後台的影片路徑,也不用擔心,請直接依照以下方法製作即可..
  1. 一樣先在flash拉一個撥放器模組出來,想要的規格與屬性請自己設定好。
  2. 然後爲你拉出來的撥放器模組實體名稱取個名子,假設叫作"player"
  3. 在影格1輸入以下程式碼    player.source = loaderInfo.parameters.flv;
  4. 好了之後先輸出swf
  5. 再來是html的部分坎入swf的語法部分,請使用下面這一段
<embed width="645" height="120" src="mov.swf" play="true" loop="true" quality="high" FlashVars="flv=xxx.flv"> </embed>

前面的寬高應該不用說了,後面的 src是你要坎入的swf路徑,後面的play 跟 loop  與 quality不改,重點是 FlashVars="flv=xxx.flv"  ,xxx.flv是只要撥的影片路徑,這個請IT自己用盛填入要撥的影片路徑。
PS.有時候甚至於寫死的撥放器,我也會用這方法,雖說影片不改,但是有時候作到後面卻一天換一隻影片(業主嘛!你知道的..),用這個方法,只要改html就好,至少不用重出swf



    Flex Formatter for FlashBuilder

    從剛接觸程式以來,一直都是用 FlashDevelop 寫 ActionScript3 ,
    最近想接觸Flex,理所當然的還是需要使用 Flex Builder ,
    畢竟對 MXML 的支援度 Flex Builder 因為能夠用視覺化的方式處理 component ,
    一定會比 FlashDevelop 好用許多,

    但是用Flex Builder來開發的話,習慣 FlashDevelop 的我就必須要 Flex Builder 改一下撰寫風格,
    不然 hard coding 的感覺會差太多。

    至於設定 Coding Style 的選項,是在 Flash Builder 的 Preference 裡的 FlashBuilder 項目中,
    然後‧‧‧‧‧‧


    幹!我只是想把左大跨號不要斷行有這樣困難嗎?
    我完全找不到設定!!!!!!!!!!


    現在是怎樣?連flash IDE都可以設定了!flashbuilder不能改這樣的設計風格嗎?
    網路上搜尋了一下,剛好找到這外掛 http://sourceforge.net/projects/flexformatter/

    檔案放在 C:\Program Files\Adobe\Adobe Flash Builder Burrito\eclipse\plugins 裡面,
    重新開啟 flashbuilder,
    做好設定,隨時按一下 Format Flex Code ,我喜歡的 Coding Style 終於出現了!

    Adobe Flash Builder 4 Hot-Key

    Ctrl + Space //程式碼參數提示(在windows系統下有衝突)
    Ctrl + Shift + T //檢視專案中的類別原始碼
    Ctrl + O //Outline
    Ctrl + Alt + R //rename (更新所有檔案中name)
    Ctrl + Alt + ↑ //複製游標所在行並貼上
    Ctrl + Alt + ↓ //複製游標所在行
    Ctrl + D //刪除游標所在行
    Ctrl + Shift + p //尋找成對大括弧

    Alt + / //程式碼屬性提示
    Alt + ↑ //游標所在行向上移動
    Alt + ↓ //游標所在行向下移動
    F3 //尋找來源宣告

    Ctrl + / //註解單行
    Ctrl + Shift + c //註解區塊

    Ctrl + K //尋找(游標反白的字串)
    Ctrl + M //編輯視窗放到最大
    Alt + ← //切換到左頁籤檔案
    Alt + → //切換到右頁籤檔案

    F11 //Debug
    Ctrl + F11 //Run
    Ctrl + B //Build All Projects

    2011年4月8日 星期五

    Flash應用實驗 之 P2P視訊廣播測試

    把你的視訊鏡頭畫面,廣播給其他網友收看..
    因為是採用P2P傳輸,與以往的FMS廣播方法不同,所以視訊資料沒有經過SERVER,自然省了很多系統資源

    測試網址



    使用方法


    1. 裝上視訊鏡頭(沒有也不用玩了..)
    2. 開一個新的連線 ( 按下我要開啟一個新房間給別人連線 )
    3. 把產生的連線碼copy給其他人
    4. 要收看的人,只要在最下面貼上剛剛產生的碼,之後按下"我要與現有房間連線"

    2011年4月5日 星期二

    五大Facebook頁面錯誤行銷術

    當越來越多的小型企業開始使用Facebook來做行銷,許多企業對於所謂的社群媒體還是摸不著頭緒,舉例來說,有些企業會將個人頁面設為公司Facebook頁面,而不知道Facebook有提供企業專屬頁面。以下列出五大小型企業最常犯的Facebook行銷錯誤:

    1. 把Facebook當作廣播器在使用

    任何社群媒體行銷顧問都會把它絕對不能犯的錯誤:把Facebook當作廣播系統。在Facebook上,企業的角色是在與消費者「互動」而非「廣播」,企業必須提供消費者成為你粉絲的理由:提供能與消費者切身相關並能吸引人的訊息,消費者才會對你按讚。

    2. 沒有認真經營Facebook頁面

    許多小型企業認為只要將Facebook頁面架設好,就能自動吸引消費者成為粉絲,不過,若企業未能真正投入心力經營Facebook頁面,不僅無法吸引新粉絲,若粉絲的意見與問題遲遲未能獲得回應,更可能破壞你和現有粉絲之間的關係。與傳統的電台廣告或黃頁簿廣告不同,架設Facebook頁面只是起步,持續的更新與經營才是關鍵。

    3. 發文千篇一律

    許多企業主只關注「行銷」,而忘記Facebook的社交特性:人們會分享他們認為有趣或實用的訊息。發文前,企業最好先想想什麼才是你的粉絲想要對朋友分享的內容。此外,當你的發文變得千篇一律,粉絲開始無聊後就會決定隱藏來自你的動態消息。若上次已經分享過照片,這次不妨試試影片或其他多媒體內容。

    4. 未能善加利用Facebook的功能與工具

    由於Facebook是一項新興的行銷媒體,許多小型企業還沒搞清楚如何善加使用Facebook的功能。舉例來說,企業的資訊標籤就很少被正確使用、多數企業也沒有架設歡迎顧客的頁面。企業會將檔案照片設為公司的商標,但在發佈動態消息上的小圖示卻未能完整顯示商標文字。此外,能提供流量分析的Facebook內建程式Facebook Insights也經常被小型企業所忽略。

    5. 違反Facebook使用條款

    許多小型企業不知道自己已經違反一些Facebook使用條款:首先,有些企業會在個人頁面上成立Facebook社群,而非使用正確的Facebook頁面;為了吸引粉絲注意,未經同意就標籤對方的照片也同樣違反使用條款,被標籤的粉絲將可以向Facebook檢舉。

    轉自數位時代

    FLASH網站精選416