如何在运行时块地查看变量的值而不是添加时的值

How to get blockly to see a variable's value at runtime instead of what it was when it was added

我们正在使用 blockly 来控制移相器游戏,这样设置是为了可以使用游戏中的自定义变量来创建 if 语句,例如游戏中元素的速度或方向。

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

例如:

var code = speed; 

这 return 是从工具箱将块添加到代码堆栈时的速度值。我们想让它return的时候速度的值其实是运行.

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

我们尝试对变量使用 getter 函数,并 return 在定义函数中使用

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

它根本不触发,语句根本不求值...或者至少,看起来是这样

我们如何在运行时以块状方式读取变量的值?

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

Blockly.mainWorkspace.getAllBlocks()

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

var myblocks = Blockly.mainWorkspace.getAllBlocks()
for( var i=0;i<myblocks.length; i++){
  if(myblocks[i].type == 'speed'){
    console.log(myblocks[i].getFieldValue('fieldName'));
  }
}