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