友情提示:380元/半年,儿童学编程,就上码丁实验室。
按下按钮时,我们希望执行与之关联的自定义代码。
在 scripts/main.js
。将以下代码添加到handlePlay
方法中。
首先,加载与按下的按钮关联的工作区内容:
loadWorkspace(event.target);
接下来,从该工作区生成代码:
Blockly.JavaScript.addReservedWords('code');var code =Blockly.JavaScript.workspaceToCode(Blockly.getMainWorkspace());
code +='MusicMaker.play();';
由于代码是由用户“编写”的,因此我们无法完全控制其内容。这就是为什么我们将代码添加到保留字列表中,以便如果用户的代码包含该名称的变量,它将自动重命名而不是冲突。
用户的代码将包含许多MusicMaker.queueSound
调用。在我们生成的脚本结束时,添加MusicMaker.play
调用以播放添加到队列中的所有声音。
最后,使用eval函数执行脚本。将它包装在try / catch中,以便将任何运行时错误记录到控制台,而不是安静地失败:
try{eval(code);}catch(error){
console.log(error);}
最终结果应如下所示:
function handlePlay(event){
loadWorkspace(event.target);Blockly.JavaScript.addReservedWords('code');var code =Blockly.JavaScript.workspaceToCode(Blockly.getMainWorkspace());
code +='MusicMaker.play();';try{eval(code);}catch(error){
console.log(error);}}
运行应用程序并尝试一下!编辑其中一个按钮以播放C4声音5次:
保存并退出编辑模式。现在,如果点击此按钮,您应该听到播放5次的C4声音。