本课简介
接下来,我们为玩家添加武器,并实现发射子弹
为玩家添加武器
- 创建武器角色,添加造型:
- 在武器中,编写如下代码:
- 其中右侧的代码可以从敌人角色中拖过来使用。
- 由于武器面向左侧时,需要切换到一个上下对称的造型(例如"AK-12",对称造型为“AK-12l”),因此需要给武器新建私有变量“武器造型”,用于保存武器原造型名称,然后当武器朝向左边时,切换到“造型名+l”。之后就通过更改变量“武器造型”来切换造型。
- 然后,让武器移到玩家的位置(将武器的“位置x/y”设为玩家的“位置x/y”),并上移一段距离(因为玩家的造型中心被设置在了底部,武器移到玩家后,还需要上移一点)
- 效果:
让玩家发射子弹
- 创建子弹角色,并添加造型:
- 在子弹角色中,编写下面的代码:
- 下面圈起来的代码可从其他角色拖过来使用;
- 当子弹被生成时,移到武器角色,并面向武器角色方向,然后朝前移动。这里我们先不编写子弹消失的代码。
- 由于子弹造型比较小,我们可以新增自制积木“将大小强行设为...”,让子弹设置大小时可以突破大小限制:(新建私有变量“之前造型”用于记录子弹之前的造型)
- 如果设置大小后,大小比目标大小还要大,说明受到了最小大小的限制,则先设为满造型,再设置大小;
- 如果设置大小后,大小比目标大小还要小,说明受到了最大大小的限制,则先设为空造型,再设置大小;
注:也可以直接加载 Arkos 拓展,这样左边的这一串积木就可以直接简化为右边的积木:
- 然后回到武器角色,添加发射子弹的代码:
可以添加一个简单的枪口火焰动画,以及开火音效(注意要通过变量切换造型,因为武器朝左时会切换到另一侧的造型):
可以看到子弹直接从角色中心射出了,这是因为子弹直接移到了武器的坐标。我们可以让子弹在产生后,往武器前端移动一段距离:
- 接下来,我们让子弹离开地图边缘,或者碰到障碍后,就删除自己。添加下面的代码:
- 新建私有变量“子弹碰到障碍?”用于记录子弹是否碰到障碍(值为 1 表示碰到了,0 表示没碰到)。开始时设为0。当判断值为 1 时,退出循环,切换子弹碎裂造型,然后删除子弹。
- 新建自制积木“子弹检测碰到障碍或边缘”,在每次循环末尾运行一次,用于检测子弹是否碰到障碍。如果碰到了,就将变量“子弹碰到障碍?”设为 1,如果没碰到,则变量值为 0。(自制积木具体代码稍后编写)
- 为自制积木编写代码:
- 开始时,将“子弹碰到障碍?”设为0。(这样如果之后没有碰到障碍,值就为 0,即没碰到)
- 第一个判断中,如果子弹坐标超出地图范围,说明碰到了地图边缘,将碰到障碍设为 1;
- 否则,子弹切换为碰撞箱造型,移到地图碰撞箱对应位置,判断当前位置是否有障碍,如果碰到障碍则将变量设为 1。
这样,当子弹碰到障碍,或移出地图边界,就会切换为碎裂造型并删除。
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG202/Arkos/Lec4/01&type=comment"
title="{射击4-创建玩家武器}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>