主题:  Sprite专门谈(Xtra专题之一)

与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#12001/11/5 12:57:55
我个人将Sprite称作“组件”,因为它确实是一种同时提供了属性和方法的功能组件。组件以Xtra的方式提供给Authorware,每种组件都有一个种类和名字。将一个Sprite Xtra文件放置在Xtras文件夹中后,启动Authorware就会发现在Insert菜单组中增加了相应的选项(即Sprite的种类),例如Macromedia Control Xtra for ActiveX向Insert菜单组中增加Control选项,DirectMediaXtra向Insert菜单组中增加TabuleiroXtra选项,QuickDraw 3D Xtra向Insert菜单组中增加ThreeD选项,QuickTime Xtra、Flash Xtra和Animated GIF Asset Xtra则都向Insert菜单组中增加Media选项(因为它们被Macromedia认为属于同一类)。

一、组件设计图标与组件对象
在使用组件的时候,同志们常常会被组件(Sprite)和组件设计图标(Sprite Icon)的问题困扰,SetSpriteProperty与SetIconProperty也是截然不同的两个函数(与此相类似的还有GetSpriteProperty、GetIconPropetry与CallIcon、CallSprite两个函数对)。
事实上,组件设计图标是组件的容器,具有与通常设计图标基本相同的特征(例如Display、Layout等等)。除此之外,组件设计图标还具有三类重要特性:属性、事件和方法。但并不是所有的组件设计图标都具有全部的三类特性,例如QuickDraw 3D Xtra组件设计图标具有属性,但不具有事件和方法。按下组件设计图标属性对话框(Propertyies:Sprite Icon)中的Options命令按钮,就可以对组件设计图标的各种属性进行设置(下图分别是QuickDraw 3DXtra与DirectMediaXtra组件设计图标的属性对话框)。



不同类型的组件通常具有大量不同的属性,对于QuickDraw 3D Xtra组件,可以对其视角、材质、模型、光源、动作等等属性进行设置,对于DirectMediaXtra组件设计图标,可以对其平衡、CPU占用率、音量等等属性进行设置。通过函数SetIconPropetry或通过属性对话框对组件设计图标属性的修改是等效的,但是利用函数SetIconPropetry可以对更多的组件设计图标属性进行设置,因为某些特殊的属性并不显示在属性对话框中。
已经显示在演示窗口中的组件叫做组件对象(在Authorware文档中,将其简单的称作Sprite,我个人认为叫做Sprite Object更为明确一些)。组件设计图标的属性不仅影响组件对象的外观,还可以影响组件对象的行为,例如QuickDraw 3D Xtra组件可以控制其中包含的3D模块如何响应用户的拖动操作:是进行旋转还是进行平移。组件设计图标和对应的组件对象可以同时具有各自的属性,由于组件对象可以看作是对应组件设计图标的一个实例,因此在默认情况下组件对象继承了组件设计图标的属性,而且对组件对象属性的修改仅影响它自身,不会对组件设计图标的属性造成影响。但是对组件设计图标属性的修改就会影响到与之对应的所有组件对象,这种影响通常会立即表现出来,但也存在一些特例:对于Flash Xtra组件设计图标,可以通过设置其广播属性(broadcastprops)来控制是否立即改变相应组件对象的属性。

二、属性设置
Authorware提供了以下4个系统函数,分别对组件设计图标的属性和组件对象的属性进行访问(读取和设置):
GetIconProperty与SetIconProperty:读取或设置指定组件设计图标特定属性的值。
GetSpriteProperty与SetSpriteProperty:读取或设置指定组件对象特定属性的值。

在运行期间对组件进行控制时,请使用SetSpriteProperty修改组件对象的属性,SetIconProperty在大部分情况下不起作用。在设计期间使用SetIconProperty后,记得要将程序文件存盘。

三、方法调用
组件方法则类似于外部函数,用于操纵组件设计图标或组件对象执行特定的动作。不同的组件具有不同的方法,调用组件设计图标的方法时,需要通过函数CallIcon;调用组件对象的方法则需要通过函数CallSprite。例如CallSprite(@"Flash",#Play)控制FLASH动画开始播放,CallSprite(@"browser",#GoBack)控制Microsoft Web Browser控件执行返回前一页的操作。

四、事件响应
事件可以由用户操作或者组件对象自身产生。例如日历型控件对象可以跟踪用户的单击事件,而Microsoft Web Browser控件可以在下载过程完毕之后自动发出事件。产生事件的组件也称为事件发送者。设计人员可以通过事件响应来对特定事件发送者产生的特定事件进行响应,Authorware提供了一系列系统变量和系统函数来对事件进行处理,例如:变量EventLastMatched包含最后一次事件响应中匹配的Xtra事件的属性列表,EventQueue包含所有等待着被处理的事件列表,事件按照到达的顺序排队;系统函数FlushEventQueue从事件列表中清除所有尚未处理的事件,SendEventReply对Xtra发送的事件进行应答。

本文禁止任何形式的转载、复制。

编辑历史:[这消息被Y编辑过(编辑时间2001-11-05 13:03:04)]
[这消息被Y编辑过(编辑时间2001-11-07 10:45:42)]
[这消息被Y编辑过(编辑时间2001-11-10 23:12:33)]


机器猫 5D精英

职务:普通成员
等级:3
金币:10.5
发贴:1197
注册:2000/9/15 9:06:40
#22001/11/5 17:00:52
好东西
今天下午我在做的时候也用了sprite

情况是这样的

有一个flash片头 要求播放完成以后自动删除自己
如果用等待图标 掐不准时间
我的方法是在flash里面最后一帧加上actionscript 空的
geturl("")

然后Authorware中flash图表下面访交互图表用event作为触发事件 设置一旦接受到flash的那个geturl
就把执行分支 然后加一个删除图表酒吧flash删除了



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#32001/11/5 17:45:29
猫咪的办法对于并行于其它内容执行的FLASH动画非常有效。

如果是独占播放的FLASH(就是像wait until done那种),利用
GetSpriteProperty(@"Flash Icon", #playing)
来构造循环测试(用决策判断结构或者repeat while语句)则更为方便。



Me

职务:普通成员
等级:2
金币:10.0
发贴:320
注册:2001/5/11 6:13:08
#42001/12/7 9:12:25
机器猫在上个帖子中说
引用:
好东西
今天下午我在做的时候也用了sprite

情况是这样的

有一个flash片头 要求播放完成以后自动删除自己
如果用等待图标 掐不准时间
我的方法是在flash里面最后一帧加上actionscript 空的
geturl("")

然后Authorware中flash图表下面访交互图表用event作为触发事件 设置一旦接受到flash的那个geturl
就把执行分支 然后加一个删除图表酒吧flash删除了

我一直用的是机器猫的第一中方法
第二种方法我载尝试的时候失败
主要是触发事件geturl第一次用
机器猫能不能把你的触发事件的表单贴出来,还有流程?(然后Authorware中flash图表下面访交互图表用event作为触发事件 设置一旦接受到flash的那个geturl
就把执行分支 然后加一个删除图表酒吧flash删除了 )



myping

职务:普通成员
等级:1
金币:0.0
发贴:33
注册:2001/9/12 23:37:58
#52001/12/7 23:54:48
哪里有QuickDraw 3D Xtra下载?