少儿编程ScratchJr教程(7)——点球大战(解决篇)
如果你还没有看过少儿编程ScratchJr教程(7)——点球大战(疑惑篇),请先看完疑惑篇后再来观看本篇文章。
不知道你有没有自己完成点球大战的小游戏,接下来我们就一起来制作它。
第一步,添加游戏场景
这一步你应该很熟悉了,新建项目,从背景图片库中选中需要的背景图片。
第二步,添加动画角色
这一步从角色库中将需要的小人、足球和球门添加进来,调整好它们的大小和初始位置。
第三步,通过积木块,制作游戏
这一步我们就按照疑惑篇中分析的游戏顺序来制作。首先是小红人在点击绿旗按钮之后会上下来回移动。
是不是很简单,使用绿旗积木来启动程序,在后面用向上移动和向下移动积木让它移动。这里你会遇到一个问题,注意看小红人的初始位置是在球门的中间,你要如何让它从这个位置开始,来回在球门间移动?
第二个问题,小红人的不是移动一次之后就停下来,而是不停的上下移动,有没有想到如何解决?在这里你可以有两种解决方式,第一种是使用上节课中的循环积木,将循环的次数设置大一些,以保证玩家在点击小蓝人之前,小红人不会停下来。
另外一种方式就是使用疑惑篇中介绍的无限循环积木,让小红人可以永不停止的移动。
接下来轮到小蓝人,点击它之后,它会跑向足球,准备将球射向球门。有没有想到点击积木?在它被点击之后,加上向右移动积木,小蓝人就会向足球移动。
接下来轮到足球了,当它被小蓝人踢中之后会飞向球门。这里你会遇到一个问题,足球什么时候开始移动?有两种方式来实现,第一种就是使用消息积木,当小蓝人移动到足球时,发送消息通知它,足球接收到小蓝人发送的消息后,开始向球门移动。
第二种方式就是像接力赛跑中一样,足球使用碰撞积木,当小蓝人碰撞到它时,足球就会开始移动。
在这节课中我就使用碰撞积木来演示,你在制作过程中最好可以将两种方式都尝试一遍,比较一下它们之间有什么区别。
接下来,足球会飞向球门,在这个过程中会出现两种情况。
第一种情况,小红人会挡住足球。
当小红人挡住足球时,它和足球都会停止移动。这时你需要思考两个问题,如何知道小红人挡住了足球?如何让他们停止移动?
有没有想到碰撞积木?不过这次是给小红人使用碰撞积木,当小红人挡住足球时,小红人的碰撞积木就会被启动。
接着就需要让他们停止移动,有没有想到停止积木?如何让足球知道自己被挡住了?小红人在碰撞积木后面使用发送消息积木通知足球,足球在接收到消息时,就可以使用停止积木停止运动。
在这里还会有一个问题,小红人自己也需要停止,它应该在哪里使用停止积木呢?你可能会将停止积木拼接在发送消息积木后面,测试游戏,你会发现小红人停止后,碰撞积木还会不停的被执行。这是因为此时小红人和足球一直接触在一起,而停止积木不会停止自己所在的指令串,所以碰撞积木会不停的被触发。想要小红人的碰撞积木启动一次之后就不再被触发,就需要让小红人和足球一样,将停止积木放在接收消息积木后面,这样停止积木就可以停止其他两个指令串的执行。
当小红人挡住足球时,小蓝人也会一边说“没有进”,一边摇摆几下摔倒在地。有没有想到并行事件以及使用接收消息积木来启动事件?别忘了使用循环积木让它来回摇摆。
第二种情况,小红人没有挡住足球,足球飞入球门。
这时小红人和足球同样会停止移动,小蓝人会一边说“进了”,一边跳跃几下以示庆祝。
你需要思考的问题是,如何知道足球飞入了球门?其实很简单,当你在前面设置足球向右移动的步数时,将它设置为刚好飞入球门。这样当足球没有因为停止积木中断移动,而是顺利执行完成移动积木时,说明足球飞入了球门。
所以,你只要在足球的移动积木后面添加一个发送消息积木,通知小红人和小蓝人球进了。小红人接收到消息后,同样还是使用停止积木让自己停止运动。小蓝人接收到消息后,同样还是使用并行事件,说话并跳跃。那足球自己需不需要停止呢?你可以自己尝试一下,再想一想为什么。
好了,这样点球大战的游戏就完成了,这也是你利用ScratchJr完成的第一个小游戏。在制作之前,你可能会觉得这个游戏很简单,但是在制作的过程中,你会发现你会想出很多不同的实现方式,并且因为实现不同,你会遇到的问题也不一样。
在制作完游戏以后,你还可以继续思考一下,如何来控制游戏的难度?例如,修改足球、小红人或者球门的大小,或是修改它们各自的移动距离和速度,这样你就可以将它变为多种难度级别的游戏,最后再将它拿出去和其他小伙伴比试比试吧。
同样的,如果你在学习过程中遇到问题无法解决,你可以扫码关注我的微信公众号“梦世界”给我留言,我会对你的提问一一进行解答。或者你有什么好的想法,也欢迎在公众号中给我留言,帮助我对教程进行持续改进。
Talk is cheap. Show me the code...
0条留言