下面我们给武器添加抛壳效果:
弹壳可以看成一种特殊子弹。在子弹角色中添加弹壳的代码:
- 新建私有变量“xv”“yv”,记录弹壳的 x 速度和 y 速度;
- 将 xv 设为 3~6 的随机数(如果方向朝左,就将 xv 设为负数);yv 设为 3~5 随机数(上抛初速度);
- 然后,每次循环将 x、y 增加速度的值,将 x 速度乘以一个系数作为旋转速度;
- 每次循环将 yv 减少 1,来模拟重力加速度。
然后,来到玩家武器,添加抛壳代码。如果当前武器使用普通子弹,就在武器的(10, 5) 坐标位置生成一个弹壳,弹壳方向和武器方向相反。
这样,玩家射击时就会产生弹壳:
但是,弹壳会一直下坠,我们希望弹壳碰到地面后就删除。因此添加下面的代码:
- 地面 y 设为弹壳生成位置下方 25 距离处;
- 当弹壳碰到地面(y < 地面 y)就删除自己。
这样,弹壳碰到地面会直接删除。这样看起来不够自然,我们可以让弹壳碰到地面后反弹:
- 碰到地面后,将 yv 乘以一个反弹系数(比如 -0.7,即 yv 取反,并衰减到原来的 0.7)
- 碰到地面后,xv 也需要减小(模拟撞到地面后,横向速度衰减),例如减小到原来的 0.5。
虽然弹壳会反弹了,但一直滞留在地面上。我们可以让弹壳产生 1.5 秒后删除: 其中,私有变量“temp”记录了开始时的时间。“当前时间 - 开始时间”>1.5,即经过 1.5 秒,就删除弹壳。
最后还有一个小问题。弹壳会被玩家和武器挡住。这是因为弹壳的 y 坐标大于玩家和武器,被当成了在玩家和武器之后:
要解决这个问题,可以新建一个私有变量“额外上移值”,然后在图层排序时减去这个值,这样,就可以控制角色图层靠前一点。例如,将弹壳的额外上移值设为 50,这样图层排序时,弹壳的 y 坐标相当于下移了 50 距离,排序时图层就会更靠前。
然后,我们为敌人武器也加上产生弹壳的代码。由于远程敌人目前都使用普通子弹,因此远程武器都产生弹壳:
这样,玩家和 AI 射击时都会产生弹壳效果。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG202/Arkos/Lec9/03&type=comment"
title="{射击中级-9-03-弹壳掉落效果}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>
本页索引