1

我正在尝试使用 Blockly 来做“制作自己的游戏”之类的事情,并且在大多数情况下它都有效。但是,当尝试通过声明一个函数并调用它来运行生成的代码(由 Blockly 自己的预定义函数生成器)时,我总是被告知该函数没有定义,无论它是什么或它包含什么。

我正在抓取并运行代码,如下所示:

var code = Blockly.JavaScript.workspaceToCode();
try{
    eval(code);
} catch (e){
    alert(e);
}

这就是演示在 Blockly 生成代码上提供的方式。我还在页面的其他地方附和了代码,它看起来对我来说是正确的:

function whatINameIt() {
    //code I give it
}
//rest of code

这与 eval 的工作方式有关吗?我唯一能想到的是,由于某种原因,它正在“评估”功能代码,但没有将其添加为可调用的东西。如果是这种情况,是否有另一种方法可以运行 Blockly 给我的代码字符串?

4

1 回答 1

0

也许您正在创建一个infinite loop. 要解决它,您将不得不添加以下几行作为文档Blockly说:

window.LoopTrap = 1000;
Blockly.JavaScript.INFINITE_LOOP_TRAP = 'if(--window.LoopTrap == 0) throw "Infinite loop.";\n';
var code = Blockly.JavaScript.workspaceToCode(workspace);

此外,如果您已创建custom Blocks,正如您的问题中所显示的那样,请确保您返回您在所有这些中创建的代码。如果你不归还它,workspace就不会知道这些Blocks想做什么。

如果您提供Blocks您正在创建/使用的代码以及您从其他函数中检索的代码,那将非常有助于您。

于 2016-04-26T13:19:08.520 回答