cocos2d-x-3.3-019-碰撞检测1-矩形区域是否相交
发布时间:2020-12-14 20:18:33 所属栏目:百科 来源:网络整理
导读:原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接 原理 Cocos里面的每个Node都有一个和它对应的矩形区域,通过api getBoundingBox()得到。碰撞监测就是判断两个物体的矩形区域是否有交叠,相应的API是intersectsRect。有交叠则认为是碰撞了。 D
原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接
原理
Demo及源码
Demo解读
主要代码
scheduleUpdate(); schedule(schedule_selector(HelloWorld::updateCustom),5.0f,kRepeatForever,0);
void HelloWorld::buildBullet(int startX,int endX,int actualY) { log("buildBullet"); std::string name = "bullet1.png"; auto sp = Sprite::createWithSpriteFrameName(name); Point startPos = Point(startX,actualY); Point endPos = Point(endX,actualY); sp->setPosition(startPos); sp->runAction( Sequence::create(MoveTo::create(3.0,endPos),CallFuncN::create(this,callfuncN_selector(HelloWorld::spriteDone)),NULL)); sp->setRotation(-90); sp->setTag(TAG_BULLET); mBullets.pushBack(sp);//放入数组 this->addChild(sp); }
void HelloWorld::update(float dt) { // log("update,%d",mPlanes.size()); // log("update,mBullets.size()); //碰撞检测 Vector<Sprite*> bulletsToBeRemoved; Vector<Sprite*> planeToBeRemoved; for (auto bullet : mBullets) { for (auto plane : mPlanes) { if (bullet->boundingBox().intersectsRect(plane->getBoundingBox())) { log("碰撞了。。。。。。。。"); bulletsToBeRemoved.pushBack(bullet); planeToBeRemoved.pushBack(plane); } } } // do remove for (auto bullet : bulletsToBeRemoved) { mBullets.eraSEObject(bullet); log("removeChild(bullet)"); this->removeChild(bullet); } bulletsToBeRemoved.clear(); for (auto plane : planeToBeRemoved) { mPlanes.eraSEObject(plane); planeBlowup(plane); } planeToBeRemoved.clear(); } 优缺点
效果图https://github.com/cheyiliu/All-in-One/raw/master/res/cocos2d/CollisionDetection-way1-use-intersectsRect.gif 扩展阅读
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |