#javascript #phaser-framework #blockly #google-blockly
#javascript #phaser-framework #блочно #google-blockly
Вопрос:
Мы используем blockly для управления фазерной игрой, и это настроено так, что операторы if могут выполняться с пользовательскими переменными из игры, например, скоростью или направлением элемента в игре.
Проблема, с которой мы столкнулись, заключается в том, что blockly считывает значения этих переменных, когда переменные добавляются в оператор if (перетаскиваются из toolbox), вместо того, какими они являются во время выполнения, что, возможно, было изменено физическим движком игры.
Например:
var code = speed;
Это возвращает значение скорости, когда блок был добавлен в стек кода из toolbox. Мы хотим, чтобы оно возвращало значение скорости, когда код фактически выполняется.
Мы пытались создать для них пользовательские интерпретаторы, но, похоже, они предназначены только для запуска пользовательских функций, а не для возврата пользовательских переменных.
Мы попытались использовать функцию получения переменной и вернуть ее в функции определения
Blockly.JavaScript['speed'] = function(block) {
var code = function() {return getSpeed();}
return [code, Blockly.JavaScript.ORDER_NONE];
};
Это вообще не срабатывает, оператор вообще не оценивает … или, по крайней мере, так кажется
Как мы можем заставить blockly считывать значение переменной во время выполнения?
Ответ №1:
Если вы хотите видеть отдельные значения переменных или блоков, вам нужно сначала получить все блоки из workspace
Blockly.mainWorkspace.getAllBlocks()
Приведенный выше код вернет все удаленные блоки в workspace, из этого вы можете получить имя вашего блока с помощью цикла и отфильтровать данные, которые вы хотите получить
var myblocks = Blockly.mainWorkspace.getAllBlocks()
for( var i=0;i<myblocks.length; i ){
if(myblocks[i].type == 'speed'){
console.log(myblocks[i].getFieldValue('fieldName'));
}
}