我们正在使用块状来控制移相器游戏,并且这是设置的,以便if语句可以使用来自游戏的自定义变量进行,例如,游戏中元素的速度或方向。
我们得到的问题是,当变量被添加到if语句(从工具箱中拖出)时,块状地读取这些变量的值,而不是它们在运行时的值,这可能是由物理引擎改变的。游戏。
例如:
var code = speed;
这将返回从工具箱中将块添加到代码堆栈时的速度值。我们希望它在代码实际运行时返回速度值。
我们尝试为它们创建自定义解释器,但它们的目的似乎只是运行自定义函数,而不是返回自定义变量。
我们尝试对变量使用getter函数并在定义函数中返回它
Blockly.JavaScript['speed'] = function(block) {
var code = function() {return getSpeed();}
return [code, Blockly.JavaScript.ORDER_NONE];
};
它根本不会发射,声明根本没有评估......或者至少,这就是它的样子
我们怎样才能在运行时阻塞读取变量的值?
如果要查看变量或块的各个值,则需要首先从工作空间获取所有块
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'));
}
}