Как получить блочно, чтобы увидеть значение переменной во время выполнения вместо того, что было, когда она была добавлена

Мы используем blockly для управления фазерной игрой, и это настроено так, чтобы можно было делать заявления с пользовательскими переменными из игры, например, со скоростью или направлением элемента в игре.

Проблема, которая у нас есть, заключается в том, что блочно считывает значения этих переменных, когда переменные добавляются в оператор if (перетаскивается из набора инструментов), а не то, что они есть во время выполнения, что могло быть изменено физическим механизмом игра.

Например:

var code = speed; 

Это возвращает значение скорости, когда блок был добавлен в стек кода из панели инструментов. Мы хотим, чтобы он возвращал значение скорости, когда код фактически выполняется.

Мы попытались создать для них пользовательские интерпретаторы, но, похоже, их цель - просто запустить пользовательские функции, а не возвращать пользовательские переменные.

Мы попытались использовать функцию-получатель для переменной и вернуть ее в функцию определения

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

Это вообще не срабатывает, утверждение вообще не оценивается... или, по крайней мере, так оно и выглядит

Как мы можем получить блочное чтение значения переменной во время выполнения?

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'));
  }
}
Другие вопросы по тегам