2.5 ActionScript 3&Flash
時(shí)間回到大約1996 年,當(dāng)時(shí)網(wǎng)絡(luò)還相對(duì)來說比較年輕,人們?cè)趯ふ乙环N工具以幫助其網(wǎng)站富有生機(jī)和鮮明醒目。在這時(shí),F(xiàn)utureSplash 出現(xiàn)了,也就是Flash的前身,通過在網(wǎng)站植入Macromedia 的Shockwave 播放器的方式來繪制簡(jiǎn)單的矢量圖形動(dòng)畫。Macromedia 公司在不久后就收購了FutureSplash Animator 并重新命名為Macromedia Flash。這些年來,F(xiàn)lash 不斷演化,能力增強(qiáng)到遍布全世界的電腦。在2000 年,Macromedia 增加了ActionScript 1.0,用編程語言的方法來編輯和操作對(duì)象,而不是僅僅用時(shí)間軸繪畫。在2005 年,ctionScript 2.0 開始將面向?qū)ο缶幊趟枷肴谌氲秸Z言當(dāng)中,⽽而不是讓ActionScript 僅有提個(gè)簡(jiǎn)單的語法。在2007 年,Adobe 收購了Macromedia,新版Flash 推出,命名為Adobe FlashCS3。Adobe 對(duì)ActionScript 版本進(jìn)行了全面的修訂和增改,推出ActionScript 3.0。
到現(xiàn)在,F(xiàn)lash 已經(jīng)是網(wǎng)頁設(shè)計(jì)師最強(qiáng)大的工具之一,然而,F(xiàn)lash 已經(jīng)不僅僅局限于網(wǎng)絡(luò)。由于名為Adobe Flex 和Adobe AIR 的新的編程平臺(tái)的出現(xiàn),開發(fā)者可以用ActionScript 3.0 去開發(fā)跨平臺(tái)(Cross-Platform)的桌面應(yīng)用程序。現(xiàn)在,F(xiàn)lash 可以來創(chuàng)作多點(diǎn)觸摸應(yīng)用,通過計(jì)算機(jī)視覺技術(shù)和多點(diǎn)觸摸感測(cè)程序,比如Touchlib,CCV 和reacTIVision 的協(xié)助。
2.5.1 理解通信過程
在我們開始用Flash 開發(fā)多點(diǎn)觸摸程序之前,理解多點(diǎn)觸摸感測(cè)程序的信息傳遞流程是很重要的。當(dāng)你啟動(dòng)一個(gè)已經(jīng)準(zhǔn)備好的程序開始發(fā)送觸點(diǎn)信息時(shí),程序可以通過TUIO 協(xié)議來讀取它。然而,F(xiàn)lash 并不能馬上理解這些觸點(diǎn)信息。這是為什么呢?“TUIO 是一個(gè)建立在UDP 通信協(xié)議上的一個(gè)非常簡(jiǎn)單的協(xié)議,所以當(dāng)你希望使用Adobe Flash CS3 或者ActionScript 3.0 來創(chuàng)建一個(gè)能快速響應(yīng)的程序時(shí),你需要有一個(gè)橋梁來讀取UDP 接⼝信息然后轉(zhuǎn)變?yōu)門CP 連接模式”
什么可以讓UDP 轉(zhuǎn)變?yōu)門CP 連接模式呢?Flash OSC 就可以。[3]。它可以在我們需要的Touchlib 和Flash 之間搭一座橋,讓你可以創(chuàng)建Flash 多點(diǎn)觸摸應(yīng)用。
Inside MyFirstApp.as,粘貼這些代碼:
在調(diào)整你的FLASH 文件屬性后,需要再加一點(diǎn)工作。找到你的DocumentClass(文檔類)屬性,并且填入app.demo.MyTouchApp.MyFirstApp,這個(gè)文件就和MyFirstApp.as 文件連接起來了。
還有最后一件事需要做,現(xiàn)在的Flash 文件是空的,并且要讓TUIO 工作的話,需要有一些東西在舞臺(tái)上以讓它識(shí)別出用戶正在觸摸屏幕。現(xiàn)在,我們放一個(gè)Shape 覆蓋舞臺(tái),使用矩形工具并讓它填滿整個(gè)舞臺(tái)。然后設(shè)定顏色,在FlashCS3 中,你甚至可以將Alpha 值調(diào)制完全透明。TUIO 就可以識(shí)別shape 并且做出響應(yīng)。
現(xiàn)在運(yùn)用“控制”菜單里的“運(yùn)行”按鈕,測(cè)試影片。
現(xiàn)在,我們添加一個(gè)TUIO 類到這個(gè).as 文件中。
再次測(cè)試影片,你應(yīng)該看到白、紅、綠的正方形在左上角,觸摸的信息在右上角,而且當(dāng)你在舞臺(tái)上觸摸的時(shí)候,在你的手指下面出現(xiàn)圈圈。
好了,一切準(zhǔn)備就緒。現(xiàn)在,我們需要解決一下如何來把收集的觸摸信息添加到一個(gè)數(shù)組里。我們創(chuàng)建一個(gè)BlobLines.as 文件,并在里面添加一個(gè)數(shù)組,每次觸摸按下的時(shí)候都會(huì)將這些觸點(diǎn)信息添加到這個(gè)數(shù)組里,而觸摸抬起的時(shí)候又把觸點(diǎn)信息從數(shù)組里移除。當(dāng)做拖拽觸摸的時(shí)候就更新數(shù)組里的所有信息,我們可以自己寫這樣的數(shù)組,但那實(shí)在是挺煩人的。但是!我很高興在TUIO.as 里的數(shù)組OBJECT_ARRAY 已經(jīng)包含了這些信息,它要比我們自己寫這個(gè)AS 文件更簡(jiǎn)單。TUIO.as 直接從FLOSC 收集信息,所以看起來要更可靠和準(zhǔn)確。
那么我們?cè)撊绾巫瞿兀课覀冎恍枰趂lash/event/TUIO.as 里添加一點(diǎn)東西即可。
OBJECT_ARRAY 是一個(gè)私有變量,這個(gè)變量的創(chuàng)建是為了能夠改變這個(gè)數(shù)組的值。這是有道理的,因?yàn)槟悴幌朐诋?dāng)你在使用特定的多點(diǎn)觸摸對(duì)象的時(shí)候隨意地改變變量值。相反,我們不想改變它,只是想在任何時(shí)候都能得到它的值,所以在第119 行左右,加上這個(gè)returnBlobs()函數(shù)。
保存文件并回到MyFirstApp.as 文件。
現(xiàn)在我們測(cè)試這些信息,當(dāng)然我們希望它能通過。
那么在這個(gè)過程中,都有些什么東西被添加或者修改呢?
addEventListener(Event.ENTER_FRAME,test_returnBlobs);被添加到一個(gè)函數(shù),而且會(huì)在每一幀都會(huì)運(yùn)行它。導(dǎo)入Event 包: import flash.events.Event; 讓AS文件知道Event.ENTER_FRAME 是什么,然后用來追蹤TUIO.returnBlobs()。
測(cè)試影片。
你應(yīng)該可以在每幀繪制的時(shí)候在文檔的屬性面板里看到觸點(diǎn)的數(shù)量。這是好事,我們以后可以在需要的時(shí)候直接開始使用。