easy-scratch/doc/scratch-vm.md

126 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2025-02-12 12:27:32 +00:00
[scratch-vm](https://github.com/LLK/scratch-vm)
[官方文档搬运](./scratch-vm/index.html)
## 主要功能
+ 侦听scratch-blocks发出的事件来构造和维护[抽象语法树](https://en.wikipedia.org/wiki/Abstract_syntax_tree)的状态。
+ 加载解析项目解析sb2和sb3项目文件生成积木和角色等
+ 导出项目:将当前项目资源打包压缩成 .sb3 文件或者生成json格式
+ 运行项目并将结果渲染至舞台
+ 扩展管理
## 编译
yarn install
yarn run build
在国内可能会因网络问题编译失败,如果有条件可以开全局代理,或者干脆在国外的服务器上编译
## 项目解析
```
├── dist # 编译后的文件夹
│ ├── node # 用在node.js
│ ├── web # 用在web
├── playground # 几个vm使用案例和文档
├── docs # 拓展帮助文档
├── src
│ ├── blocks # 对几种积木功能的定义
│ ├── extension-support # 拓展支持
│ ├── extensions # 内置拓展
│ ├── utils # 常用工具类
│ ├── dispatch # 消息调度
│ ├── playground # 几个vm使用案例
│ ├── engine # vm核心引擎
│ ├── import # 载入素材
│ ├── io # 处理IO事件
│ ├── serialization # 解析sb2和sb3文件
│ ├── sprites # 角色操作
├── test # 测试用例
├── README.md
└── package.json
└── webpack.consig.js
```
## 常用方法
#### toJSON 获取JSON格式的项目
返回:{String} JSON格式的项目
#### saveProjectSb3 获取SB3格式项目
返回:{Promise} zip格式的项目
#### loadProject 加载SB3项目
参数:{string | object}
返回:{Promise}
##### greenFlag
点击小绿旗
#### stopAll 停止项目运行
#### setTurboMode 设置为加速模式
参数:{Boolean}
#### clear 清除当前项目数据
#### addSprite 添加角色
参数:{String|Object}
返回:{Promise}
#### postIODate 向vm发送I/O数据
类型Clock、Cloud、Keyboard、Mouse、MouseWheel、UserData、Video
相关定义在src/io包下
例:
```js
//按下按键
vm.postIOData("keyboard", {
keyCode: keyCode,
key: key,
isDown: true,
});
//松开按键
vm.postIOData("keyboard", {
keyCode: keyCode,
key: key,
isDown: false,
});
//鼠标移动
vm.postIOData('mouseWheel', {
deltaX: e.deltaX,
deltaY: e.deltaY
})
//向vm发送用户信息向vm推送云变量
vm.postIOData('userData', {username: this.props.username});
```
#### addListener
监听事件,如:
- workspaceUpdate
- EXTENSION_ADDED
#### removeListener
解绑事件