【“玩物立志”scratch少儿编程】坦克动荡-“穿墙控制”和“子弹反弹”的实现-含完整代码

导读:本篇文章讲解 【“玩物立志”scratch少儿编程】坦克动荡-“穿墙控制”和“子弹反弹”的实现-含完整代码,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

🚩前言

🚀博主主页:阿阿阿阿锋的主页_CSDN

scratch是一款主要面向小朋友们的编程工具,也有很多的大朋友们喜欢它,因为它确实简单而有趣,通过搭积木,就可以建造出一些好玩的程序。
大家玩过4399的坦克动荡吗?有没有尝试试着自己去实现它呢?本文记录我在使用scratch尝试实现坦克动荡小游戏的过程中,碰到的一些问题。

在制作程序过程中,我参考了b站的视频,下面附有视频链接。
编程工具:scratch网页版
参考资料:scratch坦克大战-b站
获取完整代码:.sb3完整源码



1. 程序演示

请添加图片描述

2. 穿墙控制

穿墙控制部分的解决方案来自文章开头提到的b站up主
在实现角色运动的穿墙控制过程中,我习惯于使用的是这样的逻辑:

1)向指定方向移动
2)检测是否碰到墙壁
3)如果碰到,则返回原来的位置

也就是说,我是把每一次的运动碰墙检测绑定在一起的,但是后来发现了一个问题

为了让坦克移动地流畅一些,每一次运动的步幅都是设计地比较小的。那么如果坦克已经有一部分在墙上,此时我们无论向哪个方向移动,都会检测到碰墙,然后回到原来的位置。
也就是说,坦克会卡死在墙上。
但是坦克模型的旋转,又经常会导致部分上墙的情况出现,难以避免。

解决方案:

给坦克前后部分描上不同颜色的边框
作用:当坦克的前部上墙时,坦克就可以向后移动,摆脱墙壁。(坦克后部上墙时情况相似)

3. 子弹反弹

3. 1. 解释

注意:这里只实现了墙壁是横向或竖向的情况
在考虑子弹反弹时,我们要意识到以下问题:

1)通常,我们需要知道子弹自身的方向、子弹方向与墙壁的夹角,我们才能得到子弹反弹后的方向。
2)即使只考虑横竖向的墙壁,也有两种情况。那我们又如何判断撞击的墙壁是横向还是竖向

在scratch下,判断碰撞时墙壁的方向,我真的有点茫然。
但是我后面有了一个想法:利用中间结果

首先假设只需考虑一种墙壁方,这里我们就考虑横向的墙壁,那么墙壁的倾角就是固定的,我们只需知道子弹自身的方向就可以计算出子弹反弹后的方向,如下图

在这里插入图片描述

只考虑横向的墙壁很简单,那我们竖向的墙壁该怎么办呢?我们考虑这样一个因素:墙壁是有厚度的
在全部考虑位横向墙壁的情况下,子弹与竖直墙壁碰撞时会发生什么呢?子弹仍然像碰到横向墙壁一样反弹,那么它必然会穿过墙壁,于是我们可以利用这种特性来判断子弹碰到的墙壁是横向还是竖向:
1)在子弹碰到墙壁时,先将子弹按碰到横向墙壁的情况进行变向
2)子弹继续向新方向移动一小步
3)再次检测子弹与墙壁的碰撞情况:

  • 如果子弹此时未碰撞墙壁,子弹已经与墙壁分离,说明墙壁是横向
  • 否则,说明子弹在试图穿过墙壁,则墙壁是竖向

4)若墙壁为竖向,此时我们将子弹的方向反向即能得到正确的反弹方向

在这里插入图片描述

3. 2. 反弹分解动作演示

正上方为0,正下方为180(-180),正右为90,正左为-90

请添加图片描述


🌻结语

🧭在文章的开头,有完整程序源代码在csdn的下载地址,有需要的朋友们可自行下载。
🧭文章的主要内容到这里就已经结束啦!
🧭这次在自己的尝试下,解决了一个遇到的小问题,还是挺有成就感的。
🧭如果这次的内容分享对你有所帮助,就支持一下博主叭!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/114841.html

(1)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!