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

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

1. 程序演示



image.png


2. 穿墙控制


穿墙控制部分的解决方案来自文章开头提到的b站up主

在实现角色运动的穿墙控制过程中,我习惯于使用的是这样的逻辑:


1)向指定方向移动

2)检测是否碰到墙壁

3)如果碰到,则返回原来的位置


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


为了让坦克移动地流畅一些,每一次运动的步幅都是设计地比较小的。那么如果坦克已经有一部分在墙上,此时我们无论向哪个方向移动,都会检测到碰墙,然后回到原来的位置。

也就是说,坦克会卡死在墙上。

但是坦克模型的旋转,又经常会导致部分上墙的情况出现,难以避免。


解决方案:


给坦克前后部分描上不同颜色的边框。

作用:当坦克的前部上墙时,坦克就可以向后移动,摆脱墙壁。(坦克后部上墙时情况相似)


3. 子弹反弹


3. 1. 解释

注意:这里只实现了墙壁是横向或竖向的情况

在考虑子弹反弹时,我们要意识到以下问题:


1)通常,我们需要知道子弹自身的方向、子弹方向与墙壁的夹角,我们才能得到子弹反弹后的方向。

2)即使只考虑横竖向的墙壁,也有两种情况。那我们又如何判断撞击的墙壁是横向还是竖向?


在scratch下,判断碰撞时墙壁的方向,我真的有点茫然。

但是我后面有了一个想法:利用中间结果。


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


image.png


只考虑横向的墙壁很简单,那我们竖向的墙壁该怎么办呢?我们考虑这样一个因素:墙壁是有厚度的。

在全部考虑位横向墙壁的情况下,子弹与竖直墙壁碰撞时会发生什么呢?子弹仍然像碰到横向墙壁一样反弹,那么它必然会穿过墙壁,于是我们可以利用这种特性来判断子弹碰到的墙壁是横向还是竖向:

1)在子弹碰到墙壁时,先将子弹按碰到横向墙壁的情况进行变向

2)子弹继续向新方向移动一小步

3)再次检测子弹与墙壁的碰撞情况:


如果子弹此时未碰撞墙壁,子弹已经与墙壁分离,说明墙壁是横向的

否则,说明子弹在试图穿过墙壁,则墙壁是竖向的

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


image.png


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

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


image.png

相关文章
|
7月前
|
索引 Python
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
|
7月前
|
Java Python
星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
|
7月前
|
Python 容器
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
|
4月前
|
Java 应用服务中间件 定位技术
雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏
雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏
|
5月前
|
容器
塔防游戏开发实战教程(1):实现防守塔,添加敌人的路径点
塔防游戏开发实战教程(1):实现防守塔,添加敌人的路径点
45 0
塔防游戏开发实战教程(1):实现防守塔,添加敌人的路径点
|
7月前
|
Python
星际争霸之小霸王之小蜜蜂(十二)--猫有九条命
星际争霸之小霸王之小蜜蜂(十二)--猫有九条命
星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速
星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速
|
定位技术 图形学
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
|
12月前
|
小程序
想做个炫酷的飞行射击游戏,研究这个就够了
不久我上线了一款彩虹星球大冒险的小游戏,是一个飞行射击游戏,效果还挺不错的。有不少朋友问这个飞行射击游戏有没有模版,想通过模版学习一下其中的一些实现方法。 今天,飞行射击游戏的模版来了,长按识别下方的小程序码可直接体验。
93 0
|
12月前
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏21之enemy行走和死亡动画效果
148 0