【问题标题】:How to get blockly to see a variable's value at runtime instead of what it was when it was added如何在运行时查看变量的值而不是添加时的值
【发布时间】:2019-04-05 14:59:25
【问题描述】:

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

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

例如:

var code = speed; 

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

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

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

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

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

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

【问题讨论】:

    标签: javascript phaser-framework blockly google-blockly


    【解决方案1】:

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

    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'));
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多