Как получить ближайший блок нужного типа в Google Blockly? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть блочная компоновка:

  • Переместить
  • Переместить
  • Повернуть налево
  • Переместить
  • Переместить

Я сохранил направление движения по умолчанию снизу вверх. Когда я выполняю приведенный выше код, я вижу следующее действие:

  • Игрок движется вверх
  • Игрок движется вверх
  • Игрок поворачивает налево
  • Игроки движется влево
  • Игрок движется вверх (игрок должен двигаться влево)

Как мне получить FieldValue ближайшего блока хода?

Вот код для ваших ссылок

// MOVE PLAYER

Blockly.Blocks['move_player'] = {
  init: function() {
    this.appendDummyInput()
        .appendField("Move")
        .appendField(new Blockly.FieldTextInput("100"), "MOVE")
        .appendField("Steps");
    this.setInputsInline(false);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setColour(20);
 this.setTooltip("");
 this.setHelpUrl("");
  }
};


Blockly.JavaScript['move_player'] = function(block) {
  var text_move = block.getFieldValue('MOVE');

  direction ="bottom";

   prev = this.getParent();  
  direction = prev.getFieldValue('NAME');
  var code ="$('#player').animate({ '"+direction+"': '+="+ text_move+"px' }); ";

  return code;


};

// Turn Player 


Blockly.Blocks['turn_player'] = {
  init: function() {
    this.appendDummyInput()
        .appendField("Turn")
        .appendField(new Blockly.FieldDropdown([["Left","right"], ["Right","left"], ["Up","top"], ["Down","bottom"]]), "NAME");
    this.setInputsInline(false);
    this.setPreviousStatement(true, null);
    this.setNextStatement(true, null);
    this.setColour(330);
 this.setTooltip("");
 this.setHelpUrl("");
  }
};


Blockly.JavaScript['turn_player'] = function(block) {
  var dropdown_name = block.getFieldValue('NAME');
  // TODO: Assemble JavaScript into code variable.
  //console.log(dropdown_name);
  var code = '...;\n';
  if(dropdown_name ==='left') var code ="$('#player').animate({rotate: '90deg'}, 100);";
  if(dropdown_name ==='right') var code = "$('#player').animate({rotate: '-90deg'}, 100);";
  if(dropdown_name ==='bottom') var code= "$('#player').animate({rotate: '0deg'}, 100);";
  if(dropdown_name ==='top') var code = "$('#player').animate({rotate: '180deg'}, 100);";
  return code;
};}
...