【参加讨论】 quicktime vr(qtvr)文件制作完成后,只有将它在应用程序中播放,并根据相应的交互信息灵活地使用qtvr的各种属性和方法,才能充分发挥它的技术优势,真正实现整个系统的功能设计。authorware提供的功能可完善地实现对qtvr文件的灵活运用,因此用authorware开发运用qtvr文件的应用程序是一个很好的选择。
在用authorware开发相应的应用程序时,通常需要解决检测系统是否安装quicktime播放器、设置搜索qtvr文件的路径、根据用户的交互实时获取qtvr影视中的节点信息或热区信息等技术问题,从而才可进一步设计与这些qtvr中的信息相关的其他功能,完成应用程序的开发。本文将详细讨论在authorware中实现上述功能的具体方法。
一、 检测quicktime播放器
quicktime 3或以上版本的播放器(解码器)才支持qtvr,因此在播放qtvr文件的系统中(如windows)必须安装quicktime 3或以上版本播放器,目前最新版本是quicktime 5。运用qtvr文件的应用程序必须检测系统中是否安装quicktime 3或以上版本的播放器,并应给用户提供相应的提示信息。程序流程见图1所示。具体的设计方法是:

图1
1. 变换光标并显示相应的提示信息
拖一个计算图标到程序流程线的起始处并命名为set cursort=5。在其中输入:
setcursor(5)
见图2所示。这是在检测quicktime之前将光标形式变换沙漏形光标,使用户明确可能有一个短暂的停顿。

图2
拖一个显示图标到计算图标之后,命名为instruction。在其中输入所要显示的提示信息。这是提示用户正在检测quicktime。
2. 建立检测quicktime的交互结构
拖一个交互图标到显示图标之后,命名为detect qt。分别拖3个组图标到此交互图标的右边,形成2个条件响应分支和1个按钮响应分支。2个条件响应分支的匹配条件分别是quicktimeversion()<3和quicktimeversion()>=3。这两个分支的属性设置见图3和图4所示。quicktimeversion是xtra quicktimesupport类的系统函数,它返回系统中已安装的quicktime播放器的版本号。当版本号<3时,系统不支持播放qtvr文件;当版本号>=3时,系统支持播放qtvr文件。最后的按钮响应分支命名为exit,这是为正常退出程序而设计的,将其属性中的scope选为perpetual并在分支中设计一个含quit()函数的计算图标即可。

图3

图4
3. 显示系统中未装quicktime时的提示信息
由于在系统中未安装quicktime播放器时,qtvr文件是不能被播放的,所以这时的提示信息对用户非常重要。在quicktimeversion()<3分支上的组图标中设计如图5所示的程序流程。其中擦除图标的作用是擦除程序开始时的提示信息。计算图标的作用是将光标形式转变为原先的箭头光标,其中的语句是:setcursor(0)。显示图标warning的作用是告知用户系统中未安装quicktime 3或以上版本的播放器,此时系统不支持播放qtvr文件。

图5
二、 正确设置对qtvr文件的搜索路径
由于在authorware中播放qtvr文件的功能是由quicktime xtra实现的,而相应执行quicktime xtra的sprite图标在打开qtvr文件时仅记录其绝对路径。因此必须正确设置对qtvr文件的搜索路径,否则当qtvr文件的绝对路径发生改变时,即使将qtvr文件置于auhtorware的外部文件默认搜索路径下,也无法正确播放它。设置对qtvr文件的搜索路径和执行播放的有关程序流程见图6所示。具体设计方法是:

图6
1. 插入播放qtvr文件的sprite图标
打开分支quicktimeversion()>=3上的组图标后,点击菜单insert>media>quicktime,在此层流程线上插入一个sprite图标。此时打开quicktime xtra属性设置对话框,选中options(选项)中的show controller(显示控制条)复选框,见图7所示。点击browse按钮,打开所需播放的qtvr文件。此例是roman-coliseum.mov,这是一个qtvr多节点景象文件。关闭对话框,将此sprite图标命名为vr。

图7
若需调整qtvr的视频窗口位置,可双击打开sprite图标,用鼠标拖动qtvr视频窗口到所需位置即可。
为此sprite图标添加一个附加计算功能,在其中输入movable:=false,这是为了避免在调试程序时移动了qtvr的视频窗口。
2. 设置对qtvr文件的搜索路径
拖一个计算图标到sprite图标vr之前,命名为set path。在此图标中输入:
seticonproperty(iconid@"vr",#filename,filelocation^"roman-coliseum.mov"),见图8所示。这是使用设置图标属性的系统函数设置qtvr文件的搜索路径,此例是将搜索路径指定为应用程序所在的路径,所以应将qtvr文件置于打包后的应用程序所在的同一文件夹中。

图8
由于此计算图标中的语句需使用sprite图标的标题,所以应先设计sprite图标的内容,然后再设计此计算图标。
3. 完善对用户的提示功能
在sprite图标vr之后,设计一个擦除图标,用于擦除程序开始时的提示信息。
在擦除图标之后,设计一个计算图标,在其中输入:
setcursor(0)
这是将光标形式恢复为箭头光标。
三、 实时获取qtvr文件中的当前节点信息
当用户在qtvr窗口中不断地通过交互在其中各节点间进行浏览时,应用程序需要实时地获取qtvr文件当前的节点信息(例如节点号,这是在制作qtvr多节点景象文件时加入的信息),并根据这些信息控制程序的流程。这样就可以跟随用户对qtvr文件的任意浏览,实现应用程序对应于qtvr文件中各个节点所应具有的功能。反之,若应用程序无法获得qtvr文件的当前节点信息,则不能实现对用户浏览的跟踪。获取当前节点信息的流程图可参考图6,具体设计步骤是:
1. 激活qtvr事件触发机制
拖一个计算图标到计算图标set cursor=0之后,命名为enable triggering。在其中输入:
setspriteproperty(iconid@"vr",#vrtriggercallback,#trigger),见图9所示。 这是采用设置sprite图标属性的方法激活qtvr事件触发机制,使用户通过交互改变节点的事件可以向应用程序发送消息。

图9
2. 建立采用事件响应方式的交互结构
在计算图标enable triggering之后建立一个交互结构,并在其中设计一个事件响应分支vrevent.。将此事件响应分支的属性作如图10所示的设置。这是通过事件响应获取由qtvr交互事件发送的消息。

3. 获取节点信息
在事件响应分支vrevent的组图标中拖入一个计算图标,命名为get vrnode。在其中输入:
node_id:=getspriteproperty(iconid@"vr",#vrnode)
这是通过调用sprite图标属性的方法获取节点信息(节点标示号),并将其赋值给变量node_id。见图11所示。

图11
此时应用程序已获得了qtvr的当前节点信息,以下可据此设计与各节点相对应的程序流程。此例中随后的显示图标是显示节点信息,即显示变量node_id的值。此时分支vrevent中的程序流程如图12所示。

图12
四、 实时获取qtvr文件的热区信息
在播放qtvr文件的应用程序中,经常需要实时获取被用户点击的qtvr文件中的热区信息,即需要知道用户点击了qtvr对象的哪一个热区。这种功能需求在用于教学的课件中是经常用到的。因为在教学中常常需要判断学生是否正确点击了qtvr对象的某个部位,而这个部位可在制作qtvr文件时通过设计热区而进行标识。
获取被用户点击的热区信息的设计方法与获取节点信息的方法基本相同,只是在匹配了事件响应之后通过quicktime xtra的事件属性获取相应的热区信息。此时事件响应分支vrevent中的程序流程如图13所示。具体设计方法是:

图13
1. 获取热区信息
在事件响应分支vrevent的组图标中拖入一个计算图标,命名为get hotspotid。在其中输入:
event:=eventlastmatched@"vrevent"
hotspotid:=event[#param1]
见图14所示。此时qtvr文件中被用户点击的热区标识号已赋予变量hotspotid,此标识号是在制作qtvr文件时指定给相应热区的。这样就已获得了被用户点击的热区信息。

图14
2. 设计与热区信息相对应的程序功能
随后由决策图标构成的分支结构是根据热区信息分别显示相应的内容。这部分程序完全可根据整个程序的功能需求进行设计。
从上述应用程序的设计过程中可以看到,如果要灵活运用qtvr文件,就必须获取其中的信息。这些信息是在制作qtvr文件时就根据应用程序的功能需求而加入的。因此,制作qtvr文件和设计运用qtvr文件的应用程序两者必须处于一个完整的系统开发之中。它们必须在统一的系统设计方案下完成,否则要在应用程序中灵活运用qtvr文件会遇到较多的困难。另外,应用程序的功能设计还应尽量考虑用户使用的方便,例如当用户系统未装quicktime时,应可自动进行安装。