У меня есть блочная компоновка:
- Переместить
- Переместить
- Повернуть налево
- Переместить
- Переместить
Я сохранил направление движения по умолчанию снизу вверх. Когда я выполняю приведенный выше код, я вижу следующее действие:
- Игрок движется вверх
- Игрок движется вверх
- Игрок поворачивает налево
- Игроки движется влево
- Игрок движется вверх (игрок должен двигаться влево)
Как мне получить 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;
};}