首页 > 解决方案 > 在 Adob​​e Captivate 中无法运行的神秘 While 循环,如何修复?

问题描述

我有一个 javascript 代码可以在 Adob​​e Captivate 的时间线的特定帧中执行 javascript。

这是 JS 窗口中的代码:

window.cpAPIEventEmitter.addEventListener("CPAPI_VARIABLEVALUECHANGED",function(){

if(window.cpInfoCurrentFrame === window.exactFrame)

{

  cp.movie.pause(cp.ReasonForPause.CPCMNDPAUSE);

speechResult ="hello";

    window.cpAPIInterface.setVariableValue("SpeechReceived",speechResult);

}

},"cpInfoCurrentFrame");

它将在时间轴中的特定帧(“exactFrame”返回的帧号)上触发 JavaScript 代码......为了更清楚,我使用这些代码行在特定帧暂停时间轴,然后注入我的字符串变量(“例如,你好”)从 javascript 到迷人(我成功了,因为我可以在我的屏幕上看到更改变量“SpeechReceived”)。但问题是,即使我在屏幕上看到“SpeechReceived”更改为“hello”,Captivate“While loop”不起作用,我也无法“继续”电影......

这是我的简单项目的屏幕截图:

对整个项目的看法

这些是我构建“reza”脚本的决策块:

第一个决策块

前三个动作计算幻灯片第二个 2 的确切帧,并将该帧号保存到“exactFrame”变量。

然后它在时间线的第二个 2 处执行 Script_Window。

在 Script_Window 中,我有一个 JavaScript 来更改名为“SpeechReceived”的变量的值,并且它还暂停了我之前所说的时间线。

现在请看我最后的决定:

第二个决策块

每当“SpeechReceived”等于“hello”时,我想继续我暂停的时间线,但问题是:虽然我的变量“SpeechReceived”更改为“hello”,但什么也没发生......似乎while循环不起作用这里出了问题......我错过了什么吗?(这是一个语音识别应用程序,可在用户语音输入时将“SpeechReceived”更改为“hello”......

用户说“你好”,时间线继续电影......实际上我们等待用户的声音(“你好”)才能继续......

这听起来很神秘,为什么在世界上while循环不起作用......)

任何想法如何修复该错误?

标签: javascriptadobe-captivate

解决方案


我建议不要在第二个块中使用“继续”命令,而是使用 Captivate 的命令从帧恢复 - cpCmndGotoFrameAndResume。

如果您希望播放头从第 2 帧继续,那么您将添加以下内容来代替“继续”命令 - cpCmndGotoFrameAndResume = 2

多年来,我在 Captivate 中进行了许多基于框架的交互……而 ole 内置的框架命令对我来说是正确的。我有

希望这可以帮助你..


推荐阅读