2023 年 2 月 9 日
(相关资料图)
一、封闭地图
之前咱们的关卡虽然算是基本完成了,但是还有一个明显问题:边缘不封闭。这会导致玩家掉落到地图外无限下落,无法死亡。
有三种解决办法:
在地图下边缘加一层“死亡线”(Area2D型),添加玩家触碰死亡的逻辑;
判断玩家 y 坐标,低于某个值之后就判断死亡,比上一种更简单直接;
直接用地图 Tile 把整个关卡封闭起来,又比上一种更简单直接,而且玩家很好理解,也是现在游戏的常见做法。
于是我选择了第三种方案,用 TileMap 工具把地图封闭起来了。这个过程中我还发现一个 bug,地图区块和添加的地刺等道具始终没法网格对齐,还以为是网格设置有问题,最后发现是之前添加 TileMap 控件的时候没有把坐标设置成 (0,0),导致整体地图发生了偏移,于是又重新画了一遍地图……
二、金币计数
玩家吃金币有什么用?连数量都显示不出来!这回终于学到了,加入了金币计数的逻辑,先把逻辑调通,会自动打印在终端中了。
先把 BaseLevel 和 Coin 在节点这里各自新建一个分组 base_level 和 coin。
然后给 BaseLevel 添加两个计数 totalCoins(金币总数)和 collectCoins(获得金币数),再添加两个函数,用于修改金币总数和获得的金币数,并发出金币修改的信号 coin_total_changed。
要想让获得金币的数量变化,还得在 Coin 的代码里触发调用获得金币的代码,这里就会涉及到获得分组中的节点的逻辑了(BaseLevel)。
以上,下次开始学习界面 UI 显示,把相关数据显示在界面上。