《Little Runner》(五)——怪物碰撞检测

上一章中,虽然怪物已经出现了,但是怪物对玩家没有造成任何伤害,所以我们接下来要加入碰撞检测,如果怪物碰到主角,则扣主角的血。

我们给Player类添加点东西,如下代码显示:


Player类新增了以下内容:

(1)hit()函数:怪物碰撞到玩家时调用

(2)getiHP()函数:获取玩家血量

(3)getBoundingBox()函数:获取碰撞范围

(4)int m_iHP变量:记录玩家血量

我们再来看看Player.cpp是如何实现这些函数的,如下:

(要注意,在Player()构造函数中初始化m_iHP)


在hit函数中减少血量,并判断血量是否小于0;

getBoundingBox函数,实际上就是获得player处于界面中的的方形区域坐标集(也就是我们需要的矩形碰撞范围)


接下来,我们要给Monster添加一个检测碰撞的函数,如下代码:

(Monster.h)


(Monster.cpp中实现碰撞检测函数)

逻辑很简单,获取碰撞对象的矩形碰撞范围,判断怪物的坐标是否在这个范围之内即可。


最后修改MonsterManager的update函数:


现在运行的话,会提示错误,因为MonsterManager中没有m_player这个成员变量,所以在MonsterManager.h中要添加如下:


添加了一个绑定player的函数和一个m_player的私有成员变量。下面是bindPlayer函数的实现:


最后的最后,最关键的是,在TollgateScene.cpp中的init中添加:

(初始化MonsterManager中的m_player,不然程序会崩溃)

那么接下来运行一下项目,可以发现,怪物碰撞到主角之后自动消失了。


但是!主角被打中之后没有任何反应,太不给面子了,我们给他加点反应吧。

修改Player.cpp的hit函数,如下:


getBoundingBox函数修改一下:


resetData函数:



扣血飘字效果是写在另外一个类FlowWord里面:

FlowWord.h:


FlowWord.cpp:


要记得在Player.cpp中添加上FlowWord头文件


好了,现在运行项目,当主角被怪物击中后会向后退,并且会有扣血的标记



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值