blockly

scratch3.0 源码分析

2020-08-11  本文已影响0人  空无一码

最新一直在做少儿编程方向的创业,用到了scratch 3.0,在这里简单分享一下其原理。

什么是 scratch 3.0?

Scratch是美国麻省理工学院的“终身幼儿园团队”开发的一款图形化编程工具,通过点击并拖拽的方式就能完成编程,可以帮助儿童或成人初学者更好地学习编程的基础概念等。

Scratch1.0在2007年第一次公开发布,随后在2012年又推出了Scratch2.0版本,而Scratch3.0则是2019年的1月初正式推出的。

Scratch 3.0 采用了HTML5和JavaScript技术来编写,支持所有的现代浏览器和WebGL,能够跨平台使用。

Scratch 在github上有一系列的开源项目,其官方的开源scratch 3.0的编程网站的源码地址为:https://github.com/LLK/scratch-gui.git

系统构成

官方网站的主要界面和我们的很类似,因为我们就是基于它二次开发的: scratch.png

可以看到,从左到右,依次为代码块区,编辑区和展示区,对于其使用,本文就不展开了,重点放在其原理上。

技术架构

主项目的目录结构如下:

├── build                    # 默认编译后的文件夹
│   ├── static               # 静态资源
│   ├── index.html          
│   ├── gui.js               
│   ├── lib.js               # 编译后主要的js文件                    
├── src
│   ├── components           # UI组件,负责页面呈现
│   ├── containers           # 容器组件,承载容器组件业务逻辑
│   ├── css                  # 全局通用css
│   ├── examples             # 集成测试用例
│       ├── extensions       # 拓展案例
│   ├── lib                  # 插件及高阶组件
│       ├── audio            # 声音插件
│       ├── backpack         # 背包插件
│       ├── default-project  # 默认项目
│       ├── libraries        # 素材库相关
│       ├── video            # 视频模块
│   ├── playground           # 编译后页面的模版
│   ├── reducers             # 全局状态控制
├── test                     # 测试用例
├── translations             # 翻译库
├── README.md
└── package.json
└── webpack.consig.js

通过查看其源码的package.json,我们可以看到,它是基于react 技术栈开发,核心依赖包有:

其核心原理就是用scratch-blocks生成语句块后,用scratch-vm 虚拟机抽象成底层语法,最后再调用scratch-render 和scratch-paint渲染到界面,而scratch-audio主要用于音频的剪辑处理。

关于 scratch-vm

Scratch-VM提供了一套Scratch-Blocks运行环境,因此VM定义很多丰富的外部库,在初始化时,需要对VM进行初始化,然后再定义Scratch-Blocks,最后对Blockly和VM进行事件绑定和监听:

scratch-vm 的一些概念

vm调用过程

深入 scratch-vm

小结

整个scratch 项目的源码非常庞大,有很多我还没有时间和精力进行总结,期待项目能够顺利推进,然后投入更多的研发,然后才能进一步深入。

我曾打算一个人使用vue 3 重写整个gui,但是没有经费支持,业余时间,个人的话真的有点力不从心。

上一篇 下一篇

猜你喜欢

热点阅读