最近有个项目,基于scratch3.0二开的,发现网上这方面资料比较少,特把涉及到scratch3.0的相关知识分享给大家,让scratch3.0二开的人,可以少走点弯路。
主要涉及内容,基本以scratch3.0工程本身及相关底层接口调用或扩展为准。
目录
框架初始化升级
集成antd,集成axios:
"devDependencies": {
"antd": "^3.26.19",
"axios": "^0.26.1",
}
保存编程项目到自有服务器
项目文件上传通用封装函数
export function uploadFile (form) {
return new Promise((resolve, reject) => {
request({
url: '你自己的项目保存地址',
data: form
})
.then(response => {
resolve(response.data);
})
.catch(err => {
console.log(err);
reject(response.data);
});
});
}
编程项目上传
window.vm.saveProjectSb3().then(projectData => {
const projectFile = new File([projectData], `${window.scratch.getProjectName()}.sb3`);
const form = new FormData();
// File.lastModified:最后修改时间
// File.name:文件名或文件路径
// File.size:文件大小(单位字节)
// File.type:文件的 MIME 类型
form.append('file', projectFile);
form.append('projectId', this.state.projectId);
uploadFile(form).then(rres => {
log.debug('程序文件上传,返回结果 editProject:', rres);
if (rres && rres.data && rres.data.id) {
}
});
});
在线编程项目加载
/**
* 加载当前编程项目
* @param {number} _codeId
* @param {string} _title
*/
loadCloudProject (_codeId, _title) {
log.debug('状态用户最新的编程项目', _codeId, _title);
window.scratch.loadProject(
`你自己的项目下载地址`, _title,
res => {
log.debug('编程项目加载结果:', res);
window.scratch.setProjectName(_title);
this.props.onProjectUnchanged();
}
);
}