一段碰撞检测代码
来源:互联网 发布:unity3d 烘焙 编辑:程序博客网 时间:2024/06/05 02:02
void GameScene::checkOutCollisionBetweenEnemiesAndBullet(){ Weapon* weapon = _cannonLayer->getWeapon(); CCArray* bullets = weapon->getBullets(); CCArray* enemies = _enemyLayer->getEnemies(); CCArray* bulletDelete = CCArray::create(); CCArray* enemyDelete = CCArray::create(); CCObject* iter; CCARRAY_FOREACH(bullets, iter){ Bullet* bullet = (Bullet*)(iter); CCObject* iterator; CCARRAY_FOREACH(enemies, iterator){ EnemyBase* enemy = (EnemyBase*)(iterator); //isRunnning判断fish是否已经在屏幕上显示 if(enemy->isRunning()){ CCRect fishCollisionArea = enemy->getCollisionArea(); //子弹的位置是否在碰撞区域中 if (bullet->isRunning()) { bool isCollision = fishCollisionArea.intersectsRect(bullet->getCollisionArea()); if(isCollision){ bulletDelete->addObject(bullet); enemyDelete->addObject(enemy); } } } } CCObject* it = NULL; CCARRAY_FOREACH(enemyDelete, it) { EnemyBase *target = (EnemyBase*)(it); target->getHurt(bullet->demage); if (target->currentHP<=0 ) { enemies->removeObject(target); target->unscheduleUpdate(); target->beCaught(); } } } CCObject* it = NULL; CCARRAY_FOREACH(bulletDelete, it) { Bullet *target = (Bullet*)(it); bullets->removeObject(target); target->unscheduleUpdate(); target->end(); }}
总结:
A,其实,代码也挺平凡的,但是里面有几处需要自己去学习,比如,不在数组中直接删除,而是创建一个数组的引用,然后通过该引用把数组元素给删除掉.这点细节东西值得自己学习.
假如B是需要被删除的对象,A存储的是数据,那么遍历B数组,并且依次从A数组删除B数组的内容,无疑是正确的.
B,利用isRunning来判断精灵是否在显示范围内,如果不在,就删除掉.
0 0
- 一段碰撞检测代码
- unity3d 简单碰撞检测代码
- java像素级碰撞检测代码
- unity代码示例和碰撞检测
- 一段简单的内存检测代码
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 基于opencv+vs视频运动区域提取
- iOS 实现QQ界面
- 香烟还是时不时的点着
- 8大排序算法图文讲解
- Codeforces Round #261 (Div. 2) B. Pashmak and Flowers
- 一段碰撞检测代码
- 021
- Servlet3.0-使用注解定义Servlet
- 页面间传值的问题
- java调用sap函数
- java 类的static块
- 2012VS格式化快捷方式
- 让你的Git水平更上一层楼的10个小贴士
- Android中的引用传递和值传递分析(Java)