Blockly 自定义块

虽然Blockly定义了许多标准块,但是大多数应用程序需要定义和实现至少几个与域相关的块。

添加自定义块

虽然Blockly定义了许多标准块,但是大多数应用程序需要定义和实现至少几个与域相关的块。

块由三个组件组成:

  • 块定义对象:定义块的外观和行为,包括文本,颜色,字段和连接。
  • 工具箱引用:对工具箱XML中块类型的引用,因此用户可以将其添加到工作区中。
  • 生成器功能:生成此块的代码字符串。即使目标语言不是JavaScript,甚至对于Blockly for Android,它始终都是用JavaScript编写的。

块定义

Web负载块式加载通过脚本文件加载块。该blocks/目录包括几个标准块的示例。假设您的代码块不适合现有类别,请创建一个新的JavaScript文件。这个新的JavaScript文件需要包含在<script ...>编辑器HTML文件中的标记列表中。

注意:可以使用Blockly Developer Tools定义大多数块 ,而不是手动创建下面的代码。

典型的块定义如下所示:

// JSON格式
Blockly.Blocks['string_length'] = {
  init: function() {
    this.jsonInit({
      "message0": 'length of %1',
      "args0": [
        {
          "type": "input_value",
          "name": "VALUE",
          "check": "String"
        }
      ],
      "output": "Number",
      "colour": 160,
      "tooltip": "Returns number of letters in the provided text.",
      "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
    });
  }
};
//javascript格式
Blockly.Blocks['string_length'] = {
  init: function() {
    this.appendValueInput('VALUE')
        .setCheck('String')
        .appendField('length of');
    this.setOutput(true, 'Number');
    this.setColour(160);
    this.setTooltip('Returns number of letters in the provided text.');
    this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
  }
};

string_length:这是块的类型名称。由于所有块都共享相同的名称空间,因此最好使用由类别(在此例中string)组成的名称,然后再使用块的函数(在本例中 length)。

  • init:此功能定义块的外观。

这定义了以下块:

Blockly 自定义块

块定义的详细信息可以在“ 定义块”中找到 。

添加工具箱参考

定义后,使用类型名称将块引用到工具箱:

<xml id="toolbox" style="display: none">
  <category name="Text">
    <block type="string_length"></block>
  </category>
  ...
</xml>


有关更多详细信息,请参见工具箱指南。

添加生成器功能

最后,要将块转换为代码,请将块与生成器函数配对。生成器特定于所需的输出语言,但是标准生成器通常采用以下格式:

Blockly.JavaScript['text_length'] = function(block) {
  // String or array length.
  var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE',
      Blockly.JavaScript.ORDER_FUNCTION_CALL) || '\'\'';
  return [argument0 + '.length', Blockly.JavaScript.ORDER_MEMBER];
};
生成器功能将引用该块进行处理。它将输入(VALUE上面的输入)呈现为代码字符串,然后将它们串联为更大的表达式。


- 本文内容来自网络,如有侵权,请联系本站处理。

2022-02   阅读(74)   评论(0)
 标签: program Blockly Graphical

涨知识
MQTT

MQTT协议是一个应用层协议,他要求使用的传输层协议能提供有序的,可靠的双向字节流传输服务。

评论:
相关文章
Scratch 3.0连接EV3

本文介绍如何在Scratch中对EV3机器人进行开发。


三步完成scratch3的作品转换成HTML5文件,在线随时分享作品

本文教你一招超简单的方法,只需三步,就能将 sb3 格式作品转换成 H5,实现在移动端轻松玩!


Scratch积木指令详解

由于Scratch软件界面显示和国内等级考试大纲用词不同,部分名词出现了两种称呼。例如指令模块(积木)、程序区(代码区),其实表达的是一个意思。


大神用Scratch手搓RISC-V模拟器,成功运行Linux内核

用 Scratch 代码编写了成功运行 Linux 内核的模拟器。


MicroBlocks介绍

MicroBlocks 是受 Scratch 启发, 为「物理计算」而生的图形化编程语言。


少儿编程入门之Blockly Games

Blockly Games 是为没有计算机编程经验的孩子们设计的一系列学习编程的游戏。


适用于LEGO EV3的Microsoft MakeCode

今天我们非常高兴地宣布为乐高头脑风暴教育EV3制作MakeCode!这是我们与乐高教育的优秀合作伙伴一起进行的数月工程,设计和用户测试工作的结晶。


Scratch少儿编程扫雷教程

“扫雷”是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。



利用Tinkercad Codeblocks编程创建3D模型

Tinkercad通过Codeblock的发布将编程引入其3D建模平台。跟其他普通图形环境中那样绘制设计不一样,这是面向对象的编程,这意味着您将预定义的物体放在工作平面上,然后对其进行修改。

搜索
最新课件
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。