原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接
承上文
- 先回答拓展思考里的问题,'物理引擎可否用来做碰撞检测?',答案是肯定的,具体见下面
- 子弹如何杀伤敌人在上面的系列中已经实现。本节要实现的功能点是,继续利用碰撞检测实现飞机大战里炸弹的全屏范围攻击
本文DEMO
- 基于cocos2d-x-3.4final
- 完整代码way4https://github.com/cheyiliu/CollisionDetection
DEMO解读
主要代码
class Role { public: // 虚析构 virtual ~Role() { } // 主动撞击目标,一般会造成目标损坏 virtual void hit(Role* target) = 0; // 被撞击等,遭到损坏 virtual void gotdamage(int damage)= 0; // HP为0了,倒下 virtual void down()= 0; };
- 方法
virtual void hit(Role* target) = 0;
是一切故事的起源
代码见场景里的物理碰撞回调 log("onContactBegin"); Role* a = dynamic_cast<Role * >(contact.getShapeA()->getBody()->getNode()); Role* b = dynamic_cast<Role * >(contact.getShapeB()->getBody()->getNode()); if(a && b) { log("onContactBegin,牛顿说: 力的作用是相互的"); a->hit(b); b->hit(a); }
- 超级子弹和敌机类都类似,实现Role接口,继承自精灵
- 在超级子弹的实现中用了一个小技巧,
body->setMass(0.000001f);
将这个超级子弹的重量设的很小,这样对话,碰撞的时候不会把飞机撞的到处乱漂,从而看起来飞机还是沿原来的线路在动 - 关于监听器注册,物理碰撞和碰撞过滤同前面章节的例子
效果图
- https://github.com/cheyiliu/All-in-One/raw/master/res/cocos2d/CollisionDetection-way4-use-physics-engine-filter-%E8%8C%83%E5%9B%B4%E6%94%BB%E5%87%BB.gif
原文地址:https://www.jb51.cc/cocos2dx/344399.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。