美文网首页
Android:Blockly分析

Android:Blockly分析

作者: 我在等你回复可你没回 | 来源:发表于2019-08-08 10:02 被阅读0次

公司要搞少儿编程,我记录下Blockly的一些东东

Blockly主页是怎么样的?

image.png

左边的菜单栏代码如下

  <xml xmlns="https://developers.google.com/blockly/xml" id="toolbox" style="display: none">
    <category name="Text" colour="%{BKY_TEXTS_HUE}">
      <block type="text"></block>
      <block type="text_length"></block>
      <block type="text_print"></block>
    </category>
    <category name="Logic" colour="%{BKY_LOGIC_HUE}">
      <block type="controls_if"></block>
      <block type="logic_compare"></block>
      <block type="logic_operation"></block>
      <block type="logic_negate"></block>
      <block type="logic_boolean"></block>
    </category>
    <category name="Loops" colour="%{BKY_LOOPS_HUE}">
      <block type="controls_repeat_ext">
        <value name="TIMES">
          <block type="math_number">
            <field name="NUM">10</field>
          </block>
        </value>
      </block>
      <block type="controls_whileUntil"></block>
    </category>
    <category name="Math" colour="%{BKY_MATH_HUE}">
      <block type="math_number">
        <field name="NUM">123</field>
      </block>
      <block type="math_arithmetic"></block>
      <block type="math_single"></block>
    </category>
  </xml>

就是说菜单栏的每一项是category,子菜单是block。

右边的积木拼图代码如下

<xml xmlns="https://developers.google.com/blockly/xml" id="startBlocks" style="display: none">
    <block type="controls_if" inline="false" x="20" y="20">
      <mutation else="1"></mutation>
      <value name="IF0">
        <block type="logic_compare" inline="true">
          <field name="OP">EQ</field>
          <value name="A">
            <block type="math_arithmetic" inline="true">
              <field name="OP">MULTIPLY</field>
              <value name="A">
                <block type="math_number">
                  <field name="NUM">6</field>
                </block>
              </value>
              <value name="B">
                <block type="math_number">
                  <field name="NUM">7</field>
                </block>
              </value>
            </block>
          </value>
          <value name="B">
            <block type="math_number">
              <field name="NUM">42</field>
            </block>
          </value>
        </block>
      </value>
      <statement name="DO0">
        <block type="text_print" inline="false">
          <value name="TEXT">
            <block type="text">
              <field name="TEXT">Hello</field>
            </block>
          </value>
        </block>
      </statement>
      <statement name="ELSE">
        <block type="text_print" inline="false">
          <value name="TEXT">
            <block type="text">
              <field name="TEXT">nihao</field>
            </block>
          </value>
        </block>
      </statement>
    </block>
  </xml>

简单分析一个block


image.png

这个block又好几个block组成,最外面的block是logic_compare,用来比较。
它由两个valule和一个field组成,field就是等于号,一个valule是6x7,另一个value是42。

一个block是怎么定义的?

在blocks\logic.js中定义的,例如一个用于比较的block

  // Block for comparison operator.
  {
    "type": "logic_compare",
    "message0": "%1 %2 %3",
    "args0": [
      {
        "type": "input_value",
        "name": "A"
      },
      {
        "type": "field_dropdown",
        "name": "OP",
        "options": [
          ["=", "EQ"],
          ["\u2260", "NEQ"],
          ["\u200F<", "LT"],
          ["\u200F\u2264", "LTE"],
          ["\u200F>", "GT"],
          ["\u200F\u2265", "GTE"]
        ]
      },
      {
        "type": "input_value",
        "name": "B"
      }
    ],
    "inputsInline": true,
    "output": "Boolean",
    "style": "logic_blocks",
    "helpUrl": "%{BKY_LOGIC_COMPARE_HELPURL}",
    "extensions": ["logic_compare", "logic_op_tooltip"]
  },

输入,输出都有吗?
args就是输入,output就是输出。完事了。

然后这些积木是怎么生成代码的?代码的定义在哪里?以生成python为例子
生成的代码都放在python_compressed.js,这些代码是自动生成的,通过build.py生成。

如何自定义block??

简单简单,在blocks_compressed.js文件下加就可以了,例如简单的一个色块

Blockly.Blocks['wenfengblock'] = {
    init: function() {
      this.setColour(75);
   this.setTooltip("");
   this.setHelpUrl("");
    }
  };
image.png

然后再加到demos\generator\index.html里面引入


image.png

然后打开这个index.html就能看到效果啦!!一个绿绿的色块!!!


image.png

现在只加了色块,函数还没加,函数怎么加,后面再记录!

相关文章

网友评论

      本文标题:Android:Blockly分析

      本文链接:https://www.haomeiwen.com/subject/tbjtjctx.html