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()。
测试影片。
你应该可以在每帧绘制的时候在文档的属性面板里看到触点的数量。这是好事,我们以后可以在需要的时候直接开始使用。