详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

作者:取个昵称就那么难 时间:2023-10-18 06:02:09 

scratch-blocks是scratch-gui依赖的一个基本模块。它的作用是生成gui界面上的blocks。(有关scratch-blocks的方法可以看我上一篇博客《scratch3.0二次开发之scratch-blocks的免编译修改方法》)。blocks的作用是通过拖曳的方法组成blocks堆块,点击greenflag控件,舞台区(stage)会有相应的变化。

详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

scratch-gui的blocks的生成文件在scratch-blocks\blocks_vertical里。

blocks几种形状

blocks块的形状有以下几种:

形状名称
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法shape_statement
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法shape_hat
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法shape_end
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法shape_statement
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法output_boolean
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法output_number
详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法output_string

一个blocks块的定义

比如一个右转多少度的块

详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

定义块的代码:


Blockly.Blocks['motion_turnright'] = {
 /**
* Block to turn right.
* @this Blockly.Block
  */
 init: function() {
   this.jsonInit({
     "message0": “右转 %1 %2 度”,
     "args0": [
       {
         "type": "field_image",
         "src": Blockly.mainWorkspace.options.pathToMedia + "rotate-right.svg",
         "width": 24,
         "height": 24
       },
       {
         "type": "input_value",
         "name": "DEGREES"
       }
     ],
     "category": Blockly.Categories.motion,//块归属的类,这里是运动类。
     "extensions": ["colours_motion", "shape_statement"]
   });
 }
};

“message0“:表示块里显示的字符串,%1,%2表示块里的字段field,块里有1个field是%1,有两个field是按先后顺序设为%1,%2,以此类推,
”args0”:里面的数组元素对应上面设置的field,args0[0]对应%1,args0[1]对应%2,…。每个元素对象表示设置了的field的类型。

详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

“extensions”:"colours_motion"设置块的颜色,"shape_statement"设置了块的形状;

blocks块的使用

定义好的block块,使用的时候要把加到xml文件里,文件地址:scratch-gui\src\lib\make-toolbox-xml.js,找到对应的类,这里是motion.


<block type="motion_turnright">
           <value name="DEGREES">
               <shadow type="math_number">
                   <field name="NUM">15</field>
               </shadow>
           </value>
       </block>

motion_turnright 这是刚定义好的块。value 标签中的name,表示变量名,在scratch-vm里面会用到,shadow标签这段表示预先设置的值,也是预先设置的块。去掉value这段代码


<block type="motion_turnright"> </block>

它显示成这样:

详解scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法

scratch-blocks的编译

scratch-blocks修改后的文件,只有编译压缩后才能生效。但是按照官方的方法,windows下很难编译成功。如果是定义blocks块,可以参考上篇博客里介绍的方法《scratch3.0二次开发之scratch-blocks的免编译修改方法》

补充

下面看下scratch3.0二次开发之blocks生成代码思路

总的思路:

  1. 引入一个生成代码的文件,比如要生成arduino代码,就要引入生成arduino代码的文件,要生成python代码,就要引入python文件。

  2. 如果scratch-block中没有自己要的blocks块,就定义一个blocks块用来生成代码。(生成的方法可以看我之前的文章《[scratch3.0二次开发之scratch-blocks中的blocks的类型、定义和使用方法])》

  3. 给每个blocks定义要生成的代码。

  4. 把生成代码的代码blocks块加入make-toolbox-xml 中。

  5. 在gui中设置一个代码编辑区,用来显示生成的代码。

来源:https://blog.csdn.net/jyht1226/article/details/102764411

标签:scratch,blocks,二次开发
0
投稿

猜你喜欢

  • Python+OpenCV实现阈值分割的方法详解

    2023-08-13 02:24:00
  • 运用PyTorch动手搭建一个共享单车预测器

    2022-10-20 06:25:04
  • Python中文分词库jieba(结巴分词)详细使用介绍

    2023-03-17 10:31:35
  • Python还能这么玩之用Python修改了班花的开机密码

    2023-11-23 17:38:40
  • 一文教你如何用Python轻轻松松操作Excel,Word,CSV

    2021-11-20 22:47:52
  • 如何基于Python深度图生成3D点云详解

    2022-03-08 16:41:11
  • ASP JSON类源码

    2011-04-30 16:38:00
  • php swoft框架实例用法

    2024-05-11 09:45:02
  • Spring Boot中使用Spring-data-jpa实现数据库增删查改

    2024-01-28 09:41:28
  • Python中常用的内置方法

    2023-06-29 00:25:32
  • 详解Python对某地区二手房房价数据分析

    2022-04-07 04:47:30
  • python3利用venv配置虚拟环境及过程中的小问题小结

    2023-04-29 06:01:28
  • Oracle数据库url连接最后一个orcl代表的是配置的数据库SID

    2024-01-26 12:38:12
  • python从PDF中提取数据的示例

    2021-10-15 21:46:05
  • python密码学简单替代密码解密及测试教程

    2023-09-30 08:13:00
  • PHP高级编程实例:编写守护进程

    2023-10-27 02:03:22
  • Python 实现淘宝秒杀的示例代码

    2021-02-19 14:25:39
  • python数据类型之间怎么转换技巧分享

    2023-09-04 02:38:42
  • golang结构体与json格式串实例代码

    2024-04-27 15:36:44
  • 求任意自然数内的素数

    2009-10-15 12:21:00
  • asp之家 网络编程 m.aspxhome.com