主题:  救救我

huaping212

职务:普通成员
等级:1
金币:0.0
发贴:82
#12002/8/2 17:34:44
各位大虾,小虾想做一个声音控制程序,采用外挂函数binapi,但是声音非但控制不管用,而且静音功能变成了声音的从头播放,请问这是为什么。

我的编写过程如下:
  1、启动Authorware 6.0,新建一个名为“音量调节程序”的文件;选择“Window→F
unctions”,打开Functions窗口,单击选择窗口中Category下的“音量调节程序.a6p”,再单击窗口下方的“Load…”选择Binapi.u32弹出函数列表,按住Ctrl键选择BNA_GetVolume、BNA_SetVolume,单击Load导入本例所需要的函数。

  2、拖一个显示图标至流程线,取名为:音量面板;双击打开导入图片作为音量面板,选中该图标,单击鼠标右键,选择“Caculation…”,在出现的窗口中输入以下语句:

  Movable:=FALSE——设置该图标在运行后不可移动。

  m:=0

  a:=1

  关闭的时候连续单击OK即可。


图1滑块与音量面板

  3、再次拖一个显示图标至流程线,取名为:“音量滑块”;双击打开导入图片作为滑块,此时滑块与音量面板的位置如图1所示(注意两者在不同的图标中);选中滑块,按Ctrl+I键打开Properties对话框(如图2),单击Layout设置滑块的上下移动距离,其中滑块的Base位置为面板的下部分,End为面板的上部分,在Initial中输入yl。

  4、拖一个声音图标至流程线,双击打开导入所需要的声音文件;单击Timing选项,将Concurrency设为“Concurrent”,Play设为“Until True”、并在下面输入“a:=0”,最后单击OK即可。
5、拖一个交互图标至流程线,再在旁边放置一个群组图标,选择Hot Spot,并将响应区域与音量面板的静音部分重合,单击OK,将群组图标取名为“声音关”,双击上面的小虚线方框打开“Properties:Response”属性框,选中Hot Spot下“Highlight on Match”,再选中Response下的“Perpetual”,在Active If中输入“m=0”,Branch设为“Return”,单击OK,最后为该群组图标加上语句:m:=1(具体方法可参照第2步);在旁边再放置一个群组图标,取名为“声音开”,响应区域也与音量面板的静音部分重合,在Active If中输入:“m:=1”,其余与群组图标“声音开”的属性相同,为该群组图标加上语句:“m:=0”。

  6、双击打开“声音关”群组图标,放置一个计算图标,输入“a:=0”,在计算图标下面放置一个显示图标,在显示图标中画一个小勾图形,小勾的位置与音量面板的静音部分重合;双击打开“声音开”群组图标,放置一个计算图标,在其中输入:

  a:=1

  GoTo(IconID@"音量面板")

  7、在“声音开”群组图标旁边放置一个计算图标,双击上面的小虚线方框打开“Properties:Response”属性框,选择Type下的“Conditional”,单击Response,不选择Scope下“Perpetual”,Branch设为“Try Again”;单击Conditional,在Condition中输入:“Dragging@"音量滑块"”,Automatic设为“When True”,最后单击OK;双击打开计算图标,在其中输入如下语句:

  yl:= INT(PathPosition@"音量滑块")——获取滑块的位置数值

  BNA_SetVolume(1,yl)——将滑块的位置数值作为音量的数值,从而控制音量的大小。






魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#22002/8/2 23:18:14
把你的范例传上来吧。。呵呵。。我明天晚上帮你看看