Snap Build Your Own Block修炼之道-添加自定义类别

Snap Build Your Own Block自我修炼方法:
1、所有的面向对象,其实是对面向过程的抽象过程而已;

2、面对别人的开源项目时,需要找准源头(即项目运行的起点,当然有的是没有的哈,没有起点时,
则按照使用开源项目时,其使用流程,然后一步一步的学习研究);

//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
在Snap Build Your Own Block中添加自定类别所需要修改的JS文件如下:
JS文件:gui.js、objects.js
Snap Build Your Own Block项目的源头:

snap.html中第28行
–>gui.js 203行,该文件中第207行是IDE_Morph的初始化的工作
应用的常用设置(用户偏好设置)在第214行this.applySavedSettings();中修改

–>gui.js 264行中方法中包含有IDE_Morph建立是一些初始化块的工作,主要代码在
gui.js第282行this.buildPanes();的方法中(gui.js文件第504行);

–>跳转到 this.buildPanes()方法中,包含所有的其他初始化工作,代码如下:
{
this.createLogo();
this.createControlBar();
this.createCategories(); //在gui.js文件中的第939行
this.createPalette();
this.createStage();
this.createSpriteBar();
this.createSpriteEditor();
this.createCorralBar();
this.createCorral();
}

–>gui.js文件中的第939行代码中包含两个内部函数function addCategoryButton、
function fixCategoriesLayout;如果只是添加自定类别则只需关心addCategoryButton;
然后gui.js文件中的第939行代码中找到addCategoryButton被调用的地方(第1031行)

–>在gui.js文件中1031行代码上下解读,跳转到SpriteMorph所在JS文件:objects.js文件中的第1318行

–>在objects.js文件中用字符”categories”查找定位到SpriteMorph.prototype.categories(第6581)再次找到第117行
即可查看到Snap Build Your Own Block固定带有的类别,在这个数组中添加自定义类别,自定义类别的添加,需要
添加在’other’之前,因为在gui.js第1030行的代码可以看出,其是以’other’类作为数组的结束判断标志的;
以下是这一步所涉及到的objects.js文件中的JS代码:
{
SpriteMorph.prototype.categories = //在objects.js文件中第117行
[
‘motion’,
‘control’,
‘looks’,
‘sensing’,
‘sound’,
‘operators’,
‘pen’,
‘variables’,
‘lists’,
‘优唯思’,
‘other’ //###好像是作为一个判断数组遍历结束的标志
];

SpriteMorph.prototype.blockColor = { //在objects.js文件中第132行
motion : new Color(74, 108, 212),
looks : new Color(143, 86, 227),
sound : new Color(207, 74, 217),
pen : new Color(0, 161, 120),
control : new Color(230, 168, 34),
sensing : new Color(4, 148, 220),
operators : new Color(98, 194, 19),
variables : new Color(243, 118, 29),
lists : new Color(217, 77, 17),
优唯思 : new Color(217, 117, 17),
other: new Color(150, 150, 150)
};
}

–>在上一步修改完成之后,在objects.js文件第132中,添加同样的字段配置新添加的自定义类别的颜色
这一步是必须的,不要之后代码会运行不成功的,会出现下一下错误:
{
Uncaught TypeError: Cannot read property ‘lighter’ of undefined
at ToggleButtonMorph.drawEdges (file:///D:/mylearn/t_sourceinsight/snap/widgets.js:761:49)
at ToggleButtonMorph.createBackgrounds (file:///D:/mylearn/t_sourceinsight/snap/widgets.js:694:10)
at ToggleButtonMorph.TriggerMorph.drawNew (file:///D:/mylearn/t_sourceinsight/snap/morphic.js:9182:10)
at ToggleButtonMorph.init (file:///D:/mylearn/t_sourceinsight/snap/widgets.js:557:10)
at new ToggleButtonMorph (file:///D:/mylearn/t_sourceinsight/snap/widgets.js:502:10)
at addCategoryButton (file:///D:/mylearn/t_sourceinsight/snap/gui.js:963:18)
at file:///D:/mylearn/t_sourceinsight/snap/gui.js:1031:13
at Array.forEach (native)
at IDE_Morph.createCategories (file:///D:/mylearn/t_sourceinsight/snap/gui.js:1029:38)
at IDE_Morph.buildPanes (file:///D:/mylearn/t_sourceinsight/snap/gui.js:507:10)
}
最后的效果图:

Snap Build Your Own Block修炼之道-添加自定义类别

提示1:
在gui.js文件中第224行代码处this.currentCategory = ‘优唯思’;可以修改打开Snap时默认的选中的类别;

提示2:
如果要为自定类别添加一些默认的子块,其主要涉及修改的也是objects.js文件。

希望看官们,提供点学习别人开源框架的经验,万分感激

我QQ邮箱:1609059186@qq.com;可以相互交流

Original: https://www.cnblogs.com/kingpop/p/6443682.html
Author: KingPop
Title: Snap Build Your Own Block修炼之道-添加自定义类别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577884/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • IDEA 构建 mybatis 源码

    mybatis 源码构建 mybatis-source 下载 mybatis源码下载 mybatis-parent 版本信息 mybatis-parent 下载 mybatis-p…

    Linux 2023年6月13日
    084
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    Linux 2023年6月14日
    069
  • 转:多线程环境下调用 HttpWebRequest 并发连接限制

    .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认…

    Linux 2023年6月13日
    095
  • [转帖]shell学习之shell基础知识了解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    091
  • Typora 最后免费版本也不能用了?简单一招搞定

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 Typora是一款优秀的 Ma…

    Linux 2023年6月6日
    095
  • 一篇”水文“带你解剖HTML中的ID属性以及和Class属性的区别。

    写在开篇 哈喽!我又来写”水文”了,回顾上篇讲到的class属性,那么class属性和本篇要讲的id属性有什么不一样呢?跟随笔者步伐,一一解剖。 HTML中…

    Linux 2023年6月7日
    091
  • springBoot2.*使用redis集群/单机方法

    Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。 Jedis在实现上是直接连接的redis server,如果…

    Linux 2023年5月28日
    0111
  • alpinelinux镜像安装中文字体

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 编辑dockerfile,先切换国内镜像源,默认alpinelinux是国外源,下载包会很慢 vim Dockerfile FR…

    Linux 2023年6月7日
    0100
  • HTS备份脚本

    #!/bin/bash #program:用于升级前后备份;看时间戳 #author:sundz #version:v1 20220610 创建脚本 备份mysql以及aboss程…

    Linux 2023年6月7日
    064
  • Python之元类详解

    一、引子 元类属于Python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也是自圆其说,点到为止,从队元类的控制上来看就破绽百出,逻辑混乱; 二、什么…

    Linux 2023年6月14日
    084
  • 拓扑排序

    拓扑排序 简介 拓扑排序是将偏序的数据线性化的一种排序方法。复习下偏序和全序的概念: 全序关系是偏序关系的一个子集。 全序是集合内任何一对元素都是可比较的,比如数轴上的点都具有一个…

    Linux 2023年6月13日
    099
  • linux系统(centos)redis分片集群安装部署

    redis分片集群安装与部署 只需更改配置文件 部署架构:6个节点,3主3从。数据集分为3片,分别再A,B,C节点上。A1和B1和C1分别为A,B,C的副本。 散列槽: ​ Red…

    Linux 2023年6月8日
    088
  • mysql通过mysqldump命令重做从库详细操作步骤

    备份主库所有数据,并将dump.sql文件拷贝到从库/tmp目录 mysqldump -uroot -p –set-gtid-purged=OFF –single-transa…

    Linux 2023年6月8日
    059
  • Linux快速安装流量监控工具(实用版)

    前言: Linux流量监控工具,在此我推荐两种分别为: 1、nload(推荐)因为个人看着舒服点😂 2、iftop 你可以选择上面两种中的任何一种。下面是这两个版本的简介和安装教程…

    Linux 2023年5月27日
    078
  • dotnet诊断工具记录

    CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高) 调试高 CPU 使用率 dotnet tool install –global dotn…

    Linux 2023年6月7日
    093
  • 测试执行和软件缺陷

    测试执行 1.基本概念 测试执行就是执行测试用例、提交Bug 单、测试结论的评估和总结等一系列测试活动,测试执行不仅包含测试用例的执行,还包括其它测试活动. 2.注意事项 (1) …

    Linux 2023年6月7日
    066
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球