【Blockly开发教程】08 积木块转代码

阅读本文,了解如何定义块对应的代码、转代码流程

块转代码

前面的文章提到过,块的定义,在目录 blocks/里,而相应的转代码目录,是generators/目录。
在这里插入图片描述
这个目录下,有语言.ts文件和同名目录,如python.tspython/

这是因为python.ts(generators/python.ts)是块转python脚本的生成器实例pythonGenerator初始化的地方。

python/目录,是每一个块映射python脚本的地方。

在这里插入图片描述

举例

例如,我们在blocks/中,定义了一个积木块 (if…do…):

{
   
    'type': 'controls_if',
    'message0': '%{BKY_CONTROLS_IF_MSG_IF} %1',
    'args0': [
      {
   
        'type': 'input_value',
        'name': 'IF0',
        'check': 'Boolean',
      },
    ],
    'message1': '%{BKY_CONTROLS_IF_MSG_THEN} %1',
    'args1': [
      {
   
        'type': 'input_statement',
        'name': 'DO0',
      },
    ],
    'previousStatement': false,
    'nextStatement': false,
    'style': 'logic_blocks',
    'helpUrl': '%{BKY_CONTROLS_IF_HELPURL}',
    'suppressPrefixSuffix': true,
    'mutator': 'controls_if_mutator',
    'extensions': ['controls_if_tooltip'],
  },

那么在generators/python/logic.ts中,就要定义相应的:

// 导出一个函数,用于将Blockly的controls_if块转换成Python代码。
export function controls_if(block, generator) {
   
  // 初始化变量
  let n = 0; // 用于遍历条件和分支的计数器
  let code = '', // 存储最终生成的Python代码
    branchCode, // 存储每个条件分支的代码
    conditionCode; // 存储每个条件的表达式代码

  // 检查是否需要手动添加语句前缀
  if (generator.STATEMENT_PREFIX) {
   
    // 如果自动插入前缀关闭,则手动添加前缀,并注入block的id
    code += generator.injectId(generator
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bright_Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值