将自定义Blockly块嵌套到循环中并生成代码

时间:2016-09-15 19:16:11

标签: javascript blockly

我是新手,我正在玩创建自定义块。

我在blocks文件夹中创建了一个新文件(move.js),并在那里创建了一些自定义块。所有这些都有类似的结构,如下面的那个

Blockly.Blocks['move_forward'] = {
  init: function() {
    this.appendDummyInput()
        .appendField("Move Forward");
    this.appendDummyInput()
        .appendField(new Blockly.FieldImage("http://iosites.org/robotino/front.png", 20, 20, "Forward"));
    this.setInputsInline(true);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setColour(120);
    this.setTooltip('');
    this.setHelpUrl('http://www.example.com/');
  }
};

然后我在generators / javascript文件夹中创建了一个新文件(move.js),在那里我为块编写了非常简单的生成器(它们只返回一个字母)。

Blockly.JavaScript['move_forward'] = function(block) {
  return ['F;'];
};

块可以正常工作并返回堆叠在外部循环时应该使用的文本。但是当我将它们嵌入到重复或while循环中时会发生一些事情并且没有任何返回。我做了一些测试,我认为问题发生在

Blockly.JavaScript.statementToCode
在我的自定义块的重复生成器内调用

1 个答案:

答案 0 :(得分:1)

很难说,但生成器通常会返回

return code + '\n';

return [code, Blockly.JavaScript.ORDER_ATOMIC];

基于块(如果它返回某些东西或只是做某事)。您正在生成(并返回)没有顺序的数组(而不仅仅是return 'F;';)...不确定,但可能是导致问题。