1

我们正在使用 blockly 来控制移相器游戏,并且设置它以便使用游戏中的自定义变量(例如游戏中元素的速度或方向)进行 if 语句。

我们遇到的问题是,当变量添加到 if 语句(从工具箱中拖出)时,块读取这些变量的值,而不是它们在运行时的值,这可能已被物理引擎更改游戏。

例如:

var code = speed; 

这将返回从工具箱将块添加到代码堆栈时的速度值。我们希望它在代码实际运行时返回速度值。

我们尝试为它们创建自定义解释器,但似乎这些解释器的目的只是为了运行自定义函数,而不是返回自定义变量。

我们尝试对变量使用 getter 函数并在定义函数中返回它

Blockly.JavaScript['speed'] = function(block) {
    var code = function() {return getSpeed();}
    return [code, Blockly.JavaScript.ORDER_NONE];
};

它根本没有触发,声明根本没有评估......或者至少,看起来就是这样

我们如何才能在运行时分块地读取变量的值?

4

1 回答 1

0

如果您想查看变量或块的单个值,您需要首先从工作区获取所有块

Blockly.mainWorkspace.getAllBlocks()

上面的代码将返回工作区中所有已删除的块,您可以使用循环获取块的名称并过滤您想要获取的数据

var myblocks = Blockly.mainWorkspace.getAllBlocks()
for( var i=0;i<myblocks.length; i++){
  if(myblocks[i].type == 'speed'){
    console.log(myblocks[i].getFieldValue('fieldName'));
  }
}
于 2019-04-05T06:59:25.523 回答