October 10, 2009
ActionScript 3 中的 「attachmovie」

by MikeSchinkel
由於AS3的新顯示清單架構,很多過去的作法在這邊都會受到推翻,語法越來越趨嚴謹,導向更為完善的物件導向概念,果然學如逆水行舟,不進則退 :p。最近我開始用AS3做些事情,結果發現AS3裡面把原來AS2的attachmovie的功能拿掉了(In ActionScript 3.0, use
addChild() to add child display objects.),也就是說在AS3當中我們必須要使用 addChild() 來新增子顯示物件。
如上圖,首先先建立一個原來你想要attach的MovieClip,並記得匯出給Actionscript使用,在將其此命名為circle類別。接著我們開啟一個ActionScript檔案並命名為NewAttachGrid.as,同時也記得將剛剛建立MovieClip的fla檔當中的文件類別指定為NewAttachGrid。接著我們就可以撰寫AS3程式碼在NewAttachGrid.as當中,下面是運用此方法呈現的12x12個MovieClip之執行結果,原始碼請見「繼續閱讀」。

Related Links:
*AS2 AS3 attachMovie 一問(via 飛肯設計學苑教學討論區)
*AS2與AS3的語法比較表(via 邦邦的部落格)
*ActionScript 2.0 Migration
*顯示程式設計的基本概念
*採用顯示清單的優點
...繼續閱讀
August 8, 2008
Flash Media Server 2 錄製與播放串流視訊初探

為了新作品,本來想要用Max/Msp去製作,但是這軟體著實讓我頭痛很久!真的很難設定,不是哪邊衝到,就是會整個當機,想來想去還是用Flash好了。
作品大概運作的方式是需要即時聲音與影像的錄製與播放,Flash Media Server(FMS)在這裡相當符合需求。我最近找了些資料,做了一點點嘗試,這裡是初步建立錄影與播放的方法,可以用上圖來解釋運作的過程。
首先就是要建立與FMS的連線,因此在這裡建立一個nc的物件用來溝通。接著我們在舞台上有分別名為rec_video與re_video的視訊元件,分別用來呈現正在錄製的影像,以及重播上一個錄製並存檔的影像。
- rec_video部份:影像來源是來自攝影機,因此在這裡成像的語法就是rec_video.attachVideo(Camera.get());接著建立名為nsOut的NetStream物件。在按下錄影按鍵(rec_btn)會透過nsOut.publish();方法將錄影存到FMS當中。而按下停止按鍵(stop_btn)時則會利用nsOut.close();停止錄影。
- re_video部份:影像來源則是來自FMS的錄影存檔,同理,這裡要建立一個名為rePlay的NetStream物件,因此成像的語法是re_video.attachVideo(rePlay);。在按下播放的按鈕(play_btn)時,利用rePlay.play();方法取得錄影存檔,這裡我將程式撰寫為播放最後一個存檔的檔案。
Related Links:
*Flash Media Server 入门教程(via N神AS研究所)
*[教程]利用FMS做在线视频录制(via Tensharp-也曾有过闪亮的日子…)
...繼續閱讀
February 20, 2008
關於cloneNode的小小心得
最近在試一些有關於使用AS2將XML匯入Flash的用法。而在cloneNode這個指令上,有一點小小的迷惑,因此把心得大概寫在這裡。

如上圖,如果我新增一個myxml的物件,這個物件的格式是:
<電話簿>
<名單>
<姓名>曾紅猴</姓名>
</名單>
</電話簿>
當然很明顯,若是要存取出曾紅猴這個值,很明顯就是:
myxml.firstChild.firstChild.firstChild.firstChild.nodeValue
<電話簿> <名單> <姓名> 曾紅猴
因此trace這一段,輸出會出現曾紅猴。

但是若是使用cloneNode的指令就要注意了,cloneNode意思是指『複製該節點以下的節點』(當深度指定true之時)。因此如果承襲上面的例子,我複製<名單>底下的所有節點到新的變數newxml當中,因此寫成:
newxml = myxml.firstChild.firstChild.cloneNode(true);
這裡可以試著看看newxml的值是什麼,相信必定是:
<名單>
<姓名>曾紅猴</姓名>
</名單>
但是這裡要注意了,若同樣要抓出「曾紅猴」這個值,則必須要寫成:
newxml.firstChild.firstChild.nodeValue
<姓名> 曾紅猴
這裡比我原先想像的還要少了一個firstChild,我想原因應該是出自於cloneNode之後的原因,所以這裡似乎要忽略根節點(<名單>)去取值。這只是我推敲的結果,歡迎高手糾正!

如上圖,如果我新增一個myxml的物件,這個物件的格式是:
<電話簿>
<名單>
<姓名>曾紅猴</姓名>
</名單>
</電話簿>
當然很明顯,若是要存取出曾紅猴這個值,很明顯就是:
myxml.firstChild.firstChild.firstChild.firstChild.nodeValue
<電話簿> <名單> <姓名> 曾紅猴
因此trace這一段,輸出會出現曾紅猴。

但是若是使用cloneNode的指令就要注意了,cloneNode意思是指『複製該節點以下的節點』(當深度指定true之時)。因此如果承襲上面的例子,我複製<名單>底下的所有節點到新的變數newxml當中,因此寫成:
newxml = myxml.firstChild.firstChild.cloneNode(true);
這裡可以試著看看newxml的值是什麼,相信必定是:
<名單>
<姓名>曾紅猴</姓名>
</名單>
但是這裡要注意了,若同樣要抓出「曾紅猴」這個值,則必須要寫成:
newxml.firstChild.firstChild.nodeValue
<姓名> 曾紅猴
這裡比我原先想像的還要少了一個firstChild,我想原因應該是出自於cloneNode之後的原因,所以這裡似乎要忽略根節點(<名單>)去取值。這只是我推敲的結果,歡迎高手糾正!
June 1, 2007
Event Bubbling

最近想對兩年前去英國拍的照片做個整理,所以想說用Action Script寫個程式做個電子相簿。在這個世代交替的時期(AS2轉AS3),我也不知道這樣寫到底好不好,不過秉持學習精神,還是自己嘗試看看吧。
設計完整體頁面之後,緊接著就是在Flash裡面開使用AS拼湊出我夢想中的畫面。沒想到光是寫Menu我就有個問題,首先遇到的問題是Event Bubbling。簡單來說,若是A物件(MovieClip)包著B物件(MovieClip),而且A、B物件都有event,像是onRollOver、onRollOut、onDragOver、onDragOut、onPress、onRelease、onReleaseOutside等等事件,則會因為A包著B的關係,B的事件都無法執行。
上圖是我的Menu照片,除了1~32的小按鈕外,整個是一個叫menu的MovieClip,而小按鈕則是透過for迴圈製作名為day的MovieClip。呈現想法是這樣:滑鼠移開選單時,選單會整個漸漸淡出,但是滑鼠移回選單所在處時,則會漸漸出現。因此,我把day包在menu裡面,然後都針對兩著去設定onRollOver,onRollOut的事件。但是我卻發現怎樣day按鈕都無法運作,原來是我疏忽了Event Bubbling。
阿卡同學告訴我senocular.com的一篇文章:Dealing With Flash Button Event Capturing,裡面闡述了這些問題以及如何解決的一些辦法,相當實用。阿卡同學也很熱心地幫我解決問題,簡單來說也是menu包著day,但是只有day這個MovieClip有onRollOver事件,menu則是利用hitTest去產生動作,避開了兩個互為父子的物件,彼此事件卻無法全都執行的問題。
在此感謝阿卡,我也把原始碼分享在此,請按繼續閱讀觀看程式碼。
Related Link:
*Dealing With Flash Button Event Capturing(via senocular.com)
*senocular.com ActionScript Library(via senocular.com)
*Introduction to event handling in ActionScript 3.0(via 邦邦的部落格)
...繼續閱讀
April 13, 2006
Flash互動裝置初探
五月中整個工研院的資訊中心有技術研討會,這次的爐主竟然是我們部門!?師父和我討論了一下,我們需要一些有關於我們之前成果的呈現,想試試利用互動裝置的方式來呈現。嗯~太棒了,但是有點棘手。 就在我們沒什麼經驗的情形下,求助他人當然是最好的方法,特別是在昨天跟Daniel去看過天工開物的Office Live互動裝置展之後,在我的心中,燃起了一把熊熊的火!經過虫虫學姐的引見,真的是很高興認識了小乖學長。 和學長聊了一下,總算知道之前常常看到使用webcame回饋到Flash的機制,是利用getPixel()的指令,藉由像素顏色的改變,或是大小、形狀的變化來產生輸入。小乖學長另外也提供了一個自己製作的範例,玩玩真的很不賴(要有webcame及Flash Player 8),這樣的範例,就是利用像素顏色的改變作成的,底下還有學長參考的原網址『Protozoo.com』,這網站真的很不賴,雖然我還沒深究,但是也讓我對於互動領域的東西,了解上前進了一大步,在此衷心感謝小乖學長! 說實在話,這個範例的code我實在是看得有點吃力,自己在AS的功力尚須加強,希望在各位大大的幫助下,能夠順利跟師父把這裝置完成! Related Link:*有沒有都無所謂 *Protozoo.com - Interactive video with Flash8 *台客KTV: a project for the workshop (via Daniel)*改良版的吹泡泡遊戲(via 阿修)






![Syndicate RSS feed [Syndicate this site]](http://pics.yamedia.tw/images/rss2.gif)
![Syndicate ATOM feed [Syndicate this site]](http://pics.yamedia.tw/images/atom.gif)
