拓展作用
Scratch编程中经常会遇到一些常用的、可归纳的功能需要,例如:
- 计算两点间的距离;
- 计算从一个点指向另一个点的方向;
- 制作大地图游戏时,希望破除 Scratch 对角色大小以及舞台对角色位置的限制;
- 希望方便的对数据进行排序;
- ……
而原版积木没有提供相关积木,需要自己编写自定义积木。
Arkos 总结了一些可能会比较常用的小积木,因此编写了这个 bug 拓展,希望能帮助解决一些常见的需要。
模块
Arkos 拓展包含 5 个模块:
模块名称 | 描述 |
🚶♂️ 坐标和方向 | 坐标和方向相关的积木,如距离计算。 |
🔠 字符串处理 | 字符串处理相关的积木,如字符串查找。 |
🛠 实用积木 | 一些不好分类的实用积木集合,如区分大小写。 |
📄 信息获取 | 获取原版 Scratch 中没有提供的信息,例如特效值,角色是否隐藏等。 |
📊 排序表 | 根据排序值自动排序的表格,可用于图层排序等场景。 |
积木注释
🚶♂️ 坐标和方向
1. 计算由点1朝向点2的方向
功能:返回从点1指向点2的方向(scratch中的方向,0度就是正上方)
例如由(0,0)面向(1,1)返回45,(0,0)面向(1,0)返回90
2. 计算由方向1到方向2的角度差
功能:计算由方向1转到方向2的最小角度差(带符号,正数为顺时针,负数为逆时针)
例如:
- 由45到90,返回45
- 由45到10,返回 -35
- 由-179到179,返回-2
3. 计算两点的距离
功能:计算两点之间的距离
4. 朝…方向旋转…
功能:朝指定方向旋转一定的角度
🔠 字符串处理
1. 查找字符串位置
功能:在一个字符串中,从第 n 个位置开始,查找第一个 XX
例如: banana 中,从第 4 个位置开始,查找第一个 na ,则返回 5 。
2. 插入字符串
功能:将 XX 插入到字符串的第 n 个位置前
例如: 在 ac 的第 2 个位置前插入 b ,得到 abc
3. 替换字符串
功能:将字符串中从位置 n 到位置 m 的字符替换为 XX
例如:ABCDEF 将第 3 到第 4 个字符替换为 XX ,得到 ABXXEF
🛠 实用积木
1. 等于判断(区分大小写)
功能:和原版的“=”一样,唯一的区别是可以区分大小写(原版的等于判断无法区分大小写)
2. < ()>
功能:将一个返回值积木转换为逻辑积木。
(当值为 0、false、NaN 或空时,返回 false;否则返回 true)
而使用下面的积木,既优雅又易懂。
例子 2:我们常常会编写形如下面的代码,用 1 和 0 来代表是或否。
现在我们可以直接用下面的代码,优雅!
3. 两边比较积木
功能:判断一个值是否属于一个范围。其中可选的判断符有:<、≤、=、≠
(作用就是简化代码,其实没什么用)
简化写法,优雅.jpg
特别适用于要判断的变量特别长的时候,使用这个积木会非常方便
4. 两边比较积木 plus
功能:和上面的积木功能类似,可以判断一个变量是否在一个范围外。
运算符可选:<、≤、>、≥、=、≠;
逻辑符可选:或、且;
5. 获取颜色的代码
功能:获取颜色的 16 进制 RGB 码,例如,白色是 #ffffff。
例如,将画笔设置为白色的另一种写法:
一种办法是直接填颜色代码,但是这样非常不方便
还有一种办法是,填颜色的名字,但是这样就只能预设几种颜色,且代码编写不方便
最优雅的解决办法:
6. 强行将大小设为…
功能:可以破除 Scratch 对角色大小的限制,可以任意设置大小。
(用于在制作大地图游戏时,背景角色设置为超大大小)
7. 强行移到xy…
功能:可以破除 Scratch 对角色位置的限制,可以移到任意位置。
(例如制作大地图游戏时,使角色能够移到屏幕外的区域)
📄 信息获取
1. 获取特效…的值。
功能:获取当前某个特效的值。特效可选虚像、颜色、鱼眼……
例如,某些情况下我们想知道角色的虚像是否为100,可以使用这个积木。
2. 角色是否隐藏?
功能:判断角色是否隐藏。
有的时候,我们想知道角色是否显示或隐藏,可以使用这个积木。
3. 当前旋转方式
功能:获取角色当前旋转方式
返回值 | 含义 |
all around | 任意旋转 |
left-right | 左右翻转 |
don’t rotate | 不能旋转 |
4. 获取当前造型的宽/高
功能:获取角色当前造型的宽和高
5. 获取角色的边缘坐标
功能:获取角色的上 / 下边缘 y 或者左 / 右边缘 x 。
可用于比较精确的矩形碰撞箱的计算
6. 角色是否在舞台区外…
功能:判断角色是否移到舞台区的外面。
可用于大地图游戏中,判断怪物是否在玩家视野内,或者用于判断不在屏幕内的克隆体就删除,不渲染。
📊 排序表
排序表是一个类似列表的表格,但是表格中的内容会根据排序值排好先后顺序。
可用于 Scratch 的图层排序等场景。
1. 清空排序表
功能:清空选中的排序表的内容。
2. 设置排序表的排序方式
功能:设置排序表为升/降序。
升序:从小到大排列。例如:1,3,6,13,256
降序:从大到小排列。例如:100,97,82,60,0
3.将内容加入排序表
功能:将 XX 加入排序表,并设置排序依据值以及附加数据。
其中加入的内容为排序物的名称。排序值为用于排序的依据,附加信息是一些一起排序的信息。
4.获取排序表的内容
功能:获取特定内容在表中的信息。
可选内容 | 含义 |
名称 | 排序内容的名称 |
表中位置 | 排序内容在表中的位置 |
排序值 | 排序内容的排序依据值 |
附加信息 | 排序内容的附加信息 |
5.获取排序表中内容数
功能:获取表中排序的内容数。
例如表中有:
名称 | 排序值 | 附加值 |
小明 | 95 | 学号:248 |
小红 | 90 | 学号:297 |
则排序表有 2 个内容。
6.删除排序表中的…
功能:删除表中指定名称的内容。
排序表的隐藏用法:
运行上面的积木,如果排序表不存在,将会创建排序表。创建的排序表会出现在下拉列表中。
⚠注意:作品刷新后,新建的排序表会消失,需要重新创建(当然运行到相关积木时,如果排序表不存在,也会自动创建)。
最佳实践
案例 A :面向一个坐标
例如:使用下面的代码让角色面向坐标( 114,51 )
案例 B :面向一个克隆体
通常,我们使用下面的积木来使角色面向一个角色。
但是如果要面向一个角色的克隆体,使用上面的积木往往只能面向本体。
这时,我们可以通过获取克隆体的坐标,来实现面向克隆体,例如:
这一技巧常用于让 AI 面向敌人、塔防游戏中的炮塔面向怪物等。
案例 C :缓慢面向某个方向
有时,我们想实现塔防游戏中,炮塔慢慢旋转面向敌人的效果;或者操纵坦克时,使坦克炮台缓慢面向鼠标。这要怎么做?
- 匀速面向某个方向:
使用下面的代码,可以让角色缓慢面向鼠标:
如,炮台面向鼠标:
- 非线性面向某个方向:
使用下面的代码,可以让角色变速面向指定的方向(下面是面向 90°):
使用下面的代码,使角色变速面向鼠标:
案例 D :图层排序
例如,使用下面的两段代码,实现了一个简单的图层前后排序(根据 y 坐标排序,y坐标小的,图层靠前,下移图层少)
(注:其中的克隆体编号是私有变量)
效果(根据小球的 y 坐标来排序图层的前后关系):
更新日志
版本 | 更新内容 |
1.1 | 1. “坐标&方向”模块增加“朝..方向旋转…”积木
2. 增加“实用积木”“信息处理”“排序表”三个模块 |
1.0 | 发布“坐标&方向”模块、“字符串处理”模块的若干积木 |