修改默认角色,这里有个比较便捷的方式,但不是很规范。

首先找到project-fetcher-hoc.jsx这个高阶组件,

默认项目在这里创建的

componentDidUpdate (prevProps) {if (prevProps.projectHost !== this.props.projectHost) {storage.setProjectHost(this.props.projectHost);}if (prevProps.assetHost !== this.props.assetHost) {storage.setAssetHost(this.props.assetHost);}if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {this.fetchProject(this.props.reduxProjectId, this.props.loadingState);}if (this.props.isShowingProject && !prevProps.isShowingProject) {this.props.onProjectUnchanged();}if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) {this.props.onActivateTab(BLOCKS_TAB_INDEX);}}

可以在这里嵌入一个全局配置,让它优先加载我们的全局默认项目,默认项目可以放到

static目录下;

componentDidUpdate (prevProps) {if (prevProps.projectHost !== this.props.projectHost) {storage.setProjectHost(this.props.projectHost);}if (prevProps.assetHost !== this.props.assetHost) {storage.setAssetHost(this.props.assetHost);}if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {if ('defaultProjectURL' in window.scratchConfig) {const that = this;fetch(window.scratchConfig.defaultProjectURL).then(r => r.blob()).then(blob => {const reader = new FileReader();reader.onload = () => {that.props.onFetchedProjectData(reader.result, that.props.loadingState);};reader.readAsArrayBuffer(blob);});} else {this.fetchProject(this.props.reduxProjectId, this.props.loadingState);}}if (this.props.isShowingProject && !prevProps.isShowingProject) {this.props.onProjectUnchanged();}if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) {this.props.onActivateTab(BLOCKS_TAB_INDEX);}}

升级后的代码,如果存在默认项目配置,系统会自动优先加载你定义的默认项目,这时候我们可以直接采取任意方式编程,创建一个含默认角色的项目,丢到static目录下就可以了。

但是,项目名称,确无法读取默认项目中的名称,还需要做个强制替换:

可以找到gui.jsx文件的下面方法,做个扩展点,来强制修改项目名称:

componentDidUpdate (prevProps) {if (this.props.projectId !== prevProps.projectId && this.props.projectId !== null) {this.props.onUpdateProjectId(this.props.projectId);}if (this.props.isShowingProject && !prevProps.isShowingProject) {// this only notifies container when a project changes from not yet loaded to loaded// At this time the project view in www doesn't need to know when a project is unloadedthis.props.onProjectLoaded();}}

修改后:

componentDidUpdate (prevProps) {if (this.props.projectId !== prevProps.projectId && this.props.projectId !== null) {this.props.onUpdateProjectId(this.props.projectId);}if (this.props.isShowingProject && !prevProps.isShowingProject) {// this only notifies container when a project changes from not yet loaded to loaded// At this time the project view in www doesn't need to know when a project is unloadedthis.props.onProjectLoaded();if (window.scratchConfig && 'handleProjectLoaded' in window.scratchConfig) {window.scratchConfig.handleProjectLoaded();}if (!this.isDefaultProjectLoaded) {this.isDefaultProjectLoaded = true;if (window.scratchConfig && 'handleDefaultProjectLoaded' in window.scratchConfig) {window.scratchConfig.handleDefaultProjectLoaded();}}}}

扩展函数,修改scratch3.0默认项目名称:

//默认作品加载完毕handleDefaultProjectLoaded: () => {setTimeout(() => {if (window.scratch) {/*** 设置默认加载项目的名称*/window.scratch.setProjectName("柿子编程作品")console.log('默认作品加载完毕 handleDefaultProjectLoaded');} else {handleDefaultProjectLoaded();console.log('默认作品加载 等待重置默认作品名称 handleDefaultProjectLoaded');}}, 2)}

到这里,项目名称也终于修改好了!

scratch3.0二开替换默认角色修改默认项目名称相关推荐

  1. scratch3.0 二次开发-基本介绍(第一章)

    scratch3.0系列章节列表 scratch3.0 二次开发-基本介绍(第一章) scratch3.0二次开发运行scratch-gui项目并了解工程结构(第二章) scratch3.0二次自定义 ...

  2. wdcp 如何创建用IP就可以访问的默认站点/修改默认站点

    如何创建用IP就可以访问的默认站点/修改默认站点 关键词 1 创建默认站点 2 修改默认站点 3 创建使用IP访问的站点 在wdcp2.2版开始,可以直接在后台里创建默认站点了,也就是可以直接用IP来 ...

  3. 修改react-native项目名称

    修改react-native项目名称 摘要:每次创建react-native项目的时候都会重新执行init,感觉很耗时,想在现有项目基础上复制一份进行修改.本文主要是修改IOS部分,Android部分 ...

  4. Scratch3.0 二次开发(3)修改菜单栏

    目录 需求 动手吧 删除[语言切换].[教程].即将启用等菜单 修改菜单文字 修改[默认项目名称] 书接上文,继续修改菜单栏 需求 删除不必要的菜单项(如:语言切换.教程.即将启用的无效菜单) 修改菜 ...

  5. Scratch3.0 二次开发环境部署(一)

    简介 Scratch终于在2019年1月2日,发布了3.0正式版. 我们先来看下Scratch3.0改进了什么. 首先要说明的是,3.0完全兼容2.0的作品,所有用2.0制作的作品,都可以在3.0中打 ...

  6. scratch3.0键盘无法输入文字或修改指令中的数字的快速解决办法

    scratch3.0在使用过程中突然无法输入文字,或者修改指令中的数字?这该怎么办呢? 1.点击Scratch3窗口右上角的最小化按钮,将窗口最小化 2.在任务栏点击scratch3.0,还原刚才的窗 ...

  7. Android 9.0 禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现

    目录 1.概述 2.禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现的核心类

  8. myeclipse如何修改Web项目名称

    打比方,比如复制一个现有的项目,重命名项目名称,这里举例名称重新命名为"劳黑炭" 要清楚的是,这里的项目名称重新命名了,但是Web项目本质下的名称还是没有改变的.所以需要更改,更改 ...

  9. 使用MyEclipse修改web项目名称

    有时候再做一个web应用项目时,由于别的原因想换个项目名称,如是乎直接在项目目录上面右击Refactor-->Rename,貌似修改成功了,可当将web应用发布到tomcat上面时,再怎么访问都 ...

最新文章

  1. 旗帜鲜明的反对李彦宏当选院士!
  2. java 解析ppt动画_姜子牙口碑崩盘?我们为它做了这份炸裂的PPT!(领取源文件)...
  3. 错误:ORA-28002: the password will expire within 7 da
  4. Android开发学习笔记-自定义组合控件
  5. NYOJ 1023 还是回文(DP,花最少费用形成回文串)
  6. SharePoint2010 连接配置数据库字符串保存位置(转)
  7. Flex in a Week video training
  8. 互联网公司端午节礼盒歧视指南
  9. 【转】字符串和浮点数格式化输出小结
  10. android实现应用程序仅仅有在第一次启动时显示引导界面
  11. 计算机毕业设计之答辩
  12. 微信与企业微信消息如何互通?
  13. 哲学家是如何思考问题的-2.0版
  14. linux 移除用户所在的组,Linux用户及用户组添加和删除操作
  15. 网络舆情源头管理方案
  16. Vuforia 虚拟按钮(Unity 2020)
  17. 让文化与大数据 离婚吧
  18. autojs学习笔记
  19. nginx配置 外网参考
  20. 白话数字化-1:什么是数字化?

热门文章

  1. 2023年湖北建筑七大员八大员怎么查询?查询入口是哪里?
  2. java实现在tcp协议下进行数据的传输
  3. java生成pdf电子书_java itext导出PDF功能实现
  4. STM32 GPIO 引脚中断号重复问题的分析
  5. 服饰商标的分类是什么?
  6. 你那点小心思,微信都懂
  7. Failed to transform artifact ‘support-v4.aar (com.android.support:support-v4:22.0.0)‘ to match attri
  8. SegmentFault 巨献 1024 程序员游戏「红岸的呼唤」
  9. springboot+vue 分布式项目奶茶店
  10. Linux 新手必知必会的 10 条 Linux 基本命令