scratch二次开发-代码生成器

350 阅读2分钟

1、添加 代码生成器

公司要求要生成C语言,这个挺坑的,因为C语言我记得是要编译,然后才能运行,我就算生成了代码,但是怎么编译是个大问题,因为目前不知道怎么做,所以还是先把代码生成器做出来,看了一些文章大概知道了流程

(1)把 blockly 的 generators 文件夹直接 copy 到 scratch-blocks 下,在 scratch-blocks/build 文件夹下增加 gen_generators.js 文件,添加一行代码即可

(2)修改 build.py,在 build.py 中增加 gen_generator 方法并在 run 方法中调用,将 generators 相关文件打包进去,这时候已经修改了 scrtach-blocks,所以需要使用 npm run prepublish 命令编译,编译完就会生成对应的 scratch-blocks 中会出现 language + "_compressed.js"文件

(3)在 scratch-gui 中引用,找到 scratch-gui/src/lib/blocks.js,然后引入文件,

(4)最后进行调用,找到 scratch-gui/src/containers/blocks.jsx,增加 workspaceToCode 方法,并在 binAll 中绑定,最后对 this.workspace 增加监听事件,监听积木块变化,可以利用 redux 把生成的代码存起来全局可用

到这里发现有一些报错,感觉后面可能还会遇到就先总结出来了

2、报错:报错的类型很多,如果代码无法生成可能是块的类型错误或者是没有定义块转成什么代码,如果创建块的时候,已经定义了块的类型和属性,但是实际显示为一个红色 hat end 的类型,证明对新增块的配置无效,要检查是否改到正确的地方

(1)使用 代码生成器 时出现报错,如下图,这个是编译依赖的文件问题,需要修改,然后在重新编译

(2)如果报错如下图,这个是没有定义对应的块的类型和属性等