跳到主要內容

發表文章

目前顯示的是 二月, 2010的文章

Create a zip file from Flash AS3

AS3開始,已經有了ByteArray這樣的類別
基本上只要知道編碼, 就可以使用flash來產生任何的檔案格式
zip應該是最常使用的
以前的下載檔案, 一次都只能一個
現在可以透過 aszip 類別, 將ByteArray編碼成zip格式
之後就可以丟給伺服器或使用FileReference的save,將檔案存出來。
http://code.google.com/p/aszip/


/** * @author milkmidi * @see http://milkmidi.blogspot.com * @version 1.0.0 * @date created 2010/02/20/ * * aszip * http://code.google.com/p/aszip/ */ package { import com.bit101.components.InputText; import com.bit101.components.PushButton; import com.adobe.images.JPGEncoder; import flash.display.*; import flash.events.MouseEvent; import flash.net.FileReference; import flash.utils.ByteArray; import org.aszip.zip.ASZip; import org.aszip.compression.CompressionMethod; import org.aszip.encoding.PNGEnc; import org.aszip.saving.Method; import org.aszip.saving.Download; public class ASZipDemo extends Sprite { [Embed(source = 'demo300x300.jpg')] public static const Texture:Class; private var _txtByte :ByteArray = new ByteArray(); private var myZip :ASZip; private var input_txt :Input…

FluorineFX Part2,型別互傳

如果不知道什麼是Fluorine的話
可以先參考筆者寫的Fluorine新手上路
Fluorine之好用, 真的沒話說,
整個省去型別轉換,速度比一般的傳值接值還要快
安全性也比較高一點(至少使用httpwatch這一類的軟體, 只能查到一堆亂碼)
如果你也剛好是使用.net + Flash在開發的話,強力推薦這個技術。
在上一篇的教學裡,我們己經成功連線, 和.net互傳字串, 接下來我們就把完整成用的類別實作一次。
FluorineFX官方說明文件裡有清楚的記載flash和.net類別互傳後的型別。
在這兒都以AMF3格式做說明, AMF0(AS2)就不去討論了。
一般物件的互傳,都還滿簡單的,
但有幾個小地方要注意一下
.net回傳ArrayCollection, 只有Flex才能使用
.net回傳DataTable, flash接到是Array, 但裡面的資訊不好解悉
.net回傳DataTable加上[DataTableType("vo.UserVO")]屬性,
flash接預設是ArrayCollection裡放UserVO類別, 但Flash不能使用
需要更改service.config裡的true即可
.net回傳自定的 UserVO 類別, flash要有一個一模一樣的 UserVO.as檔
且使用 且要使用 registerClassAlias("vo.UserVO", UserVO); 注冊一次
在 console 管理介面時, 要測試傳送Array的話, 可以打上[值,值,值]

要傳送Object的話, 可以使用JSON字串, ex:{"key":"value","key2","value2"}



以下為.net的程式碼。
/// .net 傳 Array, Flash 接 Array /// .net 的這種 Array , 需要填入同型別的物件, 且一開始就要指定長度。 public string[] getArray() { return new string[] { "1", "2", "3" }; } /// .net 傳 ArrayCollectio…

FlashP2P Stratus

呼, 總於等到FlashP2P技術, 這次的代號為:Stratus
先來介紹一下發展史好了

由圖表可以知道
在Flash8,9時代, 二個使用者要互相溝通, 一定要透過伺服器來當中繼角色
A發給伺服器, 再由伺服器發給B(或其他人), 走的是rtmp協定
Flash10, P2P走的是rtmfp協定, 當然一開始還是要先跟伺服器連線一下
之後就是A直接對B啦, 省去伺服器當中間人的角色
Flash10.1 P2P可以走Group的型式, A傳給B, B在傳給C , 這樣一路的傳下去
想像一下以後如果youtube走的是這樣的模式, 高畫質的影片就離我們更近了
奶老師製作的Demo, 雙人劃筆。
http://milkmidi.googlepages.com/p2p.html





教學影片:http://www.flashrealtime.com/tuts/p2p-in-flash.html
教學網站:http://www.flashrealtime.com/basics-of-p2p-in-flash/
Adobe Stratus介紹
http://labs.adobe.com/technologies/stratus/
想要自行開發的話,可以用先adobe提供的開發者主機
在上方網址的最下面, Sign up for a Stratus beta developer key
申請一組Key就可以開發。
如果要用到Group功能的話,需要將Player升級成10.1才能用喔
原始碼分享

說明一下原理
一開始需要透過NetConnection跟伺服器連線一下。
接著伺服器會回傳你一個key值, 這個值就是這次連線時的唯一值
另一方就是要透過這個值和你做連線用
而開發時,需要二個NetStream
一個用來發送,一個用來接收
其他的寫法就跟寫FMS差不多。
SourceCodeDownload

FileReference檔案上傳與下載

來介紹一下如何使用 flash 製作檔案上傳與下載
flash本身並沒有權限能寫值到伺服器端,所以一定要透過伺服器程式語言的幫忙
從Flash8開始,多了一個叫 FileReference 的類別, 專門在做檔案上傳或下載,
而伺服器也只需要寫一隻upload的功能,讓flash呼叫。

先把要呼叫的伺服器路徑記錄下來
建構FileReference物件,同時偵聽,Select, Progress, Complete事件。
protected static const UPLOAD_URL:String = "upload.ashx"; private var _file :FileReference; _file = new FileReference(); _file.addEventListener(Event.SELECT , _selectHandler); _file.addEventListener(ProgressEvent.PROGRESS , _uploadProgressHandler); _file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA , _uploadCompleteDataHandler); 當使用者按下任意的按鈕時, 執行 _file物件的browse方法,
就會開啟作業系統的上傳對話框,讓使用者選取檔案, 為了方便與安全性, 大多都會限定開啟的副檔名。

_file.browse([new FileFilter("Images Formats (*.jpg,*.gif,*.png)", "*.jpg;*.gif;*.png", "JPEG;jp2_;GIFF")]);
當使用者選取檔案時
private function _selectHandler(e:Event):void { _stateLabel.text = _file.name + " size:" + int(_file.size / 1024) + "k"; //的到所取的檔名和檔案大小 _progressBar = new ProgressBar(this, 0, 65); /…

FlashPlayer10.1麥克風錄音

來介紹一下FP10.1的新功能:麥克風錄音
以前在FP10時,麥克風錄音功能需要透過FMS之類的主機, 才能錄音
現在不需要了喔,單swf即可
再透過adobe所提供的 WAVWriter 類別, 即可把聲音資訊存成.wav格式。
1.先安裝FlashPlayer10.1
http://labs.adobe.com/downloads/flashplayer10.html
2.準備一個麥克風(不然到這就結束了)。
3.了解一下原理:
FP10.1, Microphone類別一樣可以偵聽 SampleDataEvent.SAMPLE_DATA 事件
然後透過另一個新的ByteArray物件, 把SampleData裡的ByteArray資訊寫入。
要預聽的話,只要new一個Sound物件, 同時也偵聽SampleDataEvent
把剛剛錄好的ByteArray讀入即可
要成.wav的話
也只需透過WAVWriter物件, 將錄好的ByteArray編碼成 WAV 格式
透過FileReference物件.save,把檔案存出來。



/** * @author milkmidi * @see http://milkmidi.blogspot * @version 1.0.1 * @date created 2010/02/12/ */ package { import com.adobe.audio.format.WAVWriter; import com.bit101.components.Label; import com.bit101.components.PushButton; import flash.display.*; import flash.events.*; import flash.media.Microphone; import flash.media.Sound; import flash.net.FileReference; import flash.utils.ByteArray; import flash.utils.Timer; import milkmidi.display.MilkmidiCopyrightClip; import mx.binding.utils.BindingUtils; [SWF(width = &q…

Facebook絕對開發Part1

2010 08 19補充說明:
現在FB已經改版了
所以這樣的方法已經不適用了喔
分享一下最近開發FB App的心得,
大至上分成三種情況
1:本機應用程式開發。如 AIR 應用程式
2:IFrame架構。就是網站的框是FB的樣式, 網址也是FB的。然後一進去應用程式就一定必需要是會員並同意連線。
3:Connect架構。網址是自已的,只是去連線要FB的資訊。
在這兒先分享使用Connect教學,
Step1:申請應用程式

先到http://www.facebook.com/developers/
右邊有個
按下後,開始填些基本資料

應用程式名稱:這只是一個標題,跟設定沒有什麼關系。
完後成,左邊的選單,切換到 聯外通(Connect) 表籤,

而右邊的欄位, 也只需要在聯外通網址打上你真正的網址路徑, 在開發的過程中
我是在自己的電腦架構虛擬網域(Win7或是Win Server都可以, 但XP就沒這功能), 等測試完成
再來更改這個欄位,填上正式網址。

按下完成後
可以看到屬於自己的APP設定頁面, 記下API Key 和 Secret Key, 待會開發時會用的到。

FB的APP程式, 有二個圖片可以放置,Icon就是小圖, 當使用者加入書籤時會出現。
Logo就是大圖片,當使用者第一次要跟你的APP連線時, 這張圖片就會出現在上面。


Step2:使用Flash來開發
開發的程式有很多種可以選用,在這先使用最熟悉的Flash來開發。
下載Facebook AS3 API類別
http://code.google.com/p/facebook-actionscript-api/
官方有提供不錯的Example教學。
在開始寫程式之前,先來了解一下需求與流程。
在這兒奶老師的需求就是先進入網站,然後有一個按鈕用來觸發跟FB連線
這時會另開一個視窗,連到FB的網站,讓使用者輸入帳密,及同意該APP連線你的個人資訊。
完成連線後,就可以使用FB提供的類別, 來得到你想要的資訊,在這兒我們先得到個人資訊。
在Flash FB類別裡,
使用FacebookSessionUtil、JSSession或是WebSession來跟FB做連線
三種各有不同的使用時機點
在這兒我們先使用FacebookSessionUtil來做連線的選擇, 之後再來分悉這三種的優缺點。
宣告Fac…

免費的DAE外掛for3dMax,Maya

在奶老師的書裡,有介紹如何將3DMax或Maya做好的模型
匯出成.dae的外掛
但該網站己經改成要收費的外掛。
在這兒分享一套opencollada外掛,
一樣有3dMax和Maya的版本
經公司同事測試,可以安裝到Max2010, 且輸出成.dae
PV3D載入後皆正常。客官們請享用。
http://opencollada.org/download.html