1

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

我在 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

在我的自定义块的重复生成器中调用。

4

1 回答 1

1

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

return code + '\n';

或者

return [code, Blockly.JavaScript.ORDER_ATOMIC];

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

于 2016-11-19T14:12:55.220 回答