少儿编程Scratch3.0教程——07 侦测积木(基础知识)(文字版)

不知道你是否玩过乐高机器人,当你需要用机器人接收外界的信息时,会用到一种装置,传感器。例如有触动传感器,检测其前按钮是否按下或释放,数字超声波传感器,检测和测量与物体之间的距离,数字陀螺仪传感器,可测量机器人的转动性运动和方向的变化。


这些传感器就像是人的眼睛、耳朵、手,可以让机器人看见外面,听见外面,触摸到外面,从而更好的认识世界,与世界产生交互。在Scratch中,同样有类似的积木,可以让你获取到角色或者游戏中的状态信息,这就是这节课将要学习的内容,侦测积木类型。


这篇文章主要分为4个部分:

1、鼠标和键盘侦测

2、碰撞侦测

3、距离、日期与时间

4、提问与其他侦测积木


第一,鼠标和键盘侦测


鼠标侦测


Scratch中每个角色都会有一个坐标用来表示角色当前所在的位置,你可以使用运动分类中的x坐标y坐标积木来查看它们。与此类似,当鼠标在舞台中移动时,也会有x和y坐标表示它当前的位置,同样会有两个积木块来获取它们,就是侦测分类鼠标的x坐鼠标的y坐标



在上节课少儿编程Scratch3.0教程——06控制指令(项目练习)中,我们需要让棒球手跟随鼠标上下移动,于是使用了移到鼠标指针积木来让它跟随鼠标移动,再利用将x坐标设为...积木来固定角色横向的位置,从而让它只能上下移动。



想要实现这个效果,还有另外一种方式。你可以使用移到x:...,y...积木,然后同样固定x坐标值,再将刚刚说到的鼠标的y坐标积木放入y坐标位置,就可以到达同样的效果。如果你再将鼠标的x坐标积木放入x坐标位置,那所实现的效果就跟移到鼠标指针积木一模一样了。



除了获取鼠标的x和y坐标,你还可以侦测鼠标是否被按下。当使用按下鼠标?积木时,如果鼠标在舞台中被按下,它就会返回true,如果没有被按下,它就会返回false。



例如,你可以用按下鼠标?配合重复执行积木和如果...那么...积木,按下鼠标就让它移动到随机位置。



需要注意的是,因为在重复执行积木中会一直不停的检测鼠标是否被点击,所以如果你按下鼠标不放,角色就会一直不停的到处移动。


除了上面的两种鼠标检测,你在玩游戏时,有时可能需要用鼠标去拖动角色,有时可能又需要让它固定住,不能被鼠标拖动,这时就可以使用将拖动模式设为...积木来做控制。



当选择可拖动时,鼠标就可以拖动角色,当选择不可拖动时,鼠标就不能再拖动角色。需要注意的是,这个效果只有在全屏视图时才生效。



键盘侦测


按下鼠标?积木类似,使用按下...键?积木,你就可以侦测某个键盘按键是否被按下。在选项中,你可以选择各种需要检测的按键。



可能你还记得,在事件分类中有一个类似的积木,当按下。。。键积木。这两个积木都可以用来监测某个按键是否被按下,那它们有什么区别呢?


使用当按下。。。键积木,有点类似你在word中打字,每敲击一次键盘就可以输入一个字母,如果按住不放,它就会一直重复输入,但是速度非常慢。


而使用侦测分类中的按下...键?积木时,其通常会配合重复执行积木和条件积木来使用,因为重复执行积木的运行速度非常快,所以当你需要很灵敏的监测键盘的使用,或者需要监测多个按键是否被同时被按下时,就需要用到按下...键?


例如,你正在制作一个游戏,通过上下左右键来控制角色移动。我们可以来对比一下这两种积木的差别。在下面的视频中,小猫是通过事件分类中的当按下。。。键积木来控制,而螃蟹是使用侦测分类中的按下...键?积木来控制。


小猫


螃蟹



同样的原因,在我们上节课的打蝙蝠游戏中,不知道你有没有发现一个小bug。当你很快速的去点击棒球手时,并不是每次点击都会击打出棒球。如果想要修复这个bug,应该怎么办?你可以使用按下鼠标?积木来替换当角色被点击积木。



第二,碰撞侦测


碰撞侦测,是指可以侦测两个物体之间是否发生碰撞,可以是角色之间,可以是角色和舞台,还可以是别的一些东西。


Scratch中有三个碰撞侦测积木,分别是碰到...?积木、碰到颜色...?积木和颜色...碰到...?积木。



碰到...?积木你已经在打蝙蝠的游戏中使用过,它可以选择鼠标指针、舞台边缘或者一个角色,当碰撞到所选的东西时,就会返回true,否则将返回false。


碰到...?积木是侦测整个角色是否被碰撞,有时候,你可能想要更精确的判断角色的某一个部分是否被碰撞到,这时就可以使用另外两个碰撞侦测积木,碰到颜色...?积木和颜色...碰到...?积木


碰到颜色...?积木可以侦测角色是否碰撞到了某种颜色,例如你在玩超级玛丽时,就可以通过颜色来区分玛丽是站在陆地还是平台,或者已经掉坑里了。


当你需要改变颜色时,点击积木中的颜色区域,就会弹出一个调色菜单。第一个颜色就是用来更换颜色。第二个饱和度是用来调整颜色的色调,数字越大,色彩越艳丽,如果设为0,则只有暗灰色。第三个亮度是用来调整颜色的明暗,设为0完全变黑,设为100颜色最亮。


使用这三个调节器来调整颜色并不太方便,如果你需要选择的颜色已经在舞台上,最简单的方式,就是利用底部的滴管工具从舞台上来直接选择。



碰到颜色...?积木是去侦测整个角色是否碰到某种颜色,如果你需要更精准的判断角色的某一边是否碰到了某种颜色,这时颜色...碰到...?积木就起作用了。


这个积木中有两个颜色框,第一个框选择的是角色本身的某种颜色,第二个框是需要判断它是否碰撞到的颜色。通过这个积木块,你就可以很容易的知道角色的某个方向是否被碰撞。


你可以在角色的各个方向都画上一个与背景颜色一样的像素点,这样就可以侦测角色是否发送碰撞。如果还需要知道方向,你只需要将每个像素点换成不同的颜色,不过这样看上去可能就不太好看,有一种方式可以解决这个问题。


单独为角色创建一个造型,使用不同的颜色画出四条边,大小和角色一样,就像一个彩色的盒子。这样你就可以先切换为彩色盒子,使用颜色...碰到...?积木做碰撞侦测,接着再切换成原本的造型。因为程序运行时切换的速度会极快,所以你的眼睛根本看不见切换的过程。



需要注意的是,因为许多颜色看上去似乎一样,但实际上是不同的颜色,这时可能会让你感觉侦测不起作用。所以在使用这个积木时,尽量使用滴管工具来获取颜色,并且使用差别较大的两种颜色来进行判断。


碰撞侦测应该算是游戏中最重要的侦测功能,你可以去看看自己平时玩的游戏,哪些地方用到了碰撞侦测?


第三,距离、日期与时间


距离


有的时候,你可能并不想侦测角色之间是否发生碰撞,而是想知道它们是否正在靠近,这时你就可以使用到...的距离积木,它可以选择鼠标指针或是其他角色。使用这个积木,你就可以知道当前角色离所选物体的距离还有多远。



日期与时间


你每天的生活都离不开时间,例如你几点起床,几点上学,几点睡觉都会有相应的安排。在Scratch你也同样可以利用积木获取日期和时间,从而完成自己想做的事情。


第一个获取时间的方式是当前时间的...积木,你可以选择年月日时分秒和星期,然后该积木会返回一个数字,代表当前所选的时间。例如,我正在写文章的此刻返回的是2021年7月28日14时8分57秒。需要注意的是,选择星期以后返回的也是一个数字,星期日返回1,星期一返回2,以此类推,星期六返回7。



另一个获取时间的积木是2000年至今的天数积木,它会返回给你2000年1月1日距离现在过去了多少天,利用它你就可以很容易的为自己制作一个生日倒计时,用自己生日距离2000年1月1日的天数  2000年至今的天数 = 生日倒计天数,别忘了把2000年至今的天数积木返回的数字四舍五入,你会在下一个积木类型运算积木中学到它。



如果你在游戏中想要知道游戏运行了多久,或者像要制作一个游戏倒计时应该怎么办?这时你就可以使用计时器积木和计时器归零积木。



计时器积木会记录从游戏开始时或者计时器归零时到现在总共过去了多少秒钟,而计时器归零积木会将计时器清零,重新开始记录。


例如,你的游戏必须在60秒内完成,每次游戏开始时你就可以先用计时器归零将时间记录清零,然后用 60 — 计时器积木的时间(四舍五入) = 60秒游戏倒计时


第四,询问与其他侦测积木


询问与回答


你有没有玩过问问题的游戏?你向别人提问,如果对方回答错了就需要继续回答,直到回答正确才能开始下一个问题。


使用询问...并等待积木,就可以让角色像是用说话积木一样说出你填入的问题,这时舞台上还会出现一个输入框,玩游戏的人可以在里面输入答案,程序也会像使用等待积木一样,停止运行等待对方回答。当对方在输入框中填入答案并确认以后,程序才会继续执行,你可以使用回答积木获取到对方输入的内容。



其他侦测积木


上面的积木块基本都是当前角色使用之后获取自己的信息,如果你需要知道舞台上其他角色的信息应该怎么办?


你可以使用舞台(角色)的...积木,它可以选择舞台或者某个角色,然后选择需要获取舞台的编号、名称、音量、变量等信息,或是所选角色的坐标、方向、大小等信息。


选择舞台或角色


舞台的信息


角色的信息


最后,还有响度用户名积木,响度积木可以利用电脑麦克风获取电脑周围环境的音量,而用户名积木则是你使用Scratch在线版时,获取你所登录的用户名。



以上就是侦测积木的全部内容,侦测积木可以说是游戏中必不可少的东西,你需要多动手去使用它们,感受一下每种积木块的用法,尽可能的熟练掌握它们。


同样,如果你在学习过程中遇到问题无法解决,你可以扫码关注我的微信公众号“梦世界”给我留言,或是加入我所建的微信交流群中给我反馈(微信公众号中给我留言,我会拉你入群),我会对你的提问一一进行解答。

在下一篇文章中,我还是将会引导你利用上面的内容来完成一个简单的游戏,我们下节课再见。


Talk is cheap. Show me the code...




如果你看完以上内容,对少儿编程感兴趣,有初中以下想学习编程或者数学思维课的小朋友,欢迎联系。如果你有Web应用系统、手机APP、微信小程序等软件开发需求,也欢迎与我联系。期待能与你共同进步。。。

0条留言

留言