126 lines
2.8 KiB
Markdown
126 lines
2.8 KiB
Markdown
|
||
[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
|
||
|
||
解绑事件
|