原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接
scheduleUpdate(); schedule(schedule_selector(HelloWorld::updateCustom),5.0f,kRepeatForever,0);生成子d或者飞机并放到对应的辅助数据结构来跟踪
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);}每一帧里作碰撞监测,这里简单demo了下。 更复杂的逻辑处理见扩展阅读
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
以上是内存溢出为你收集整理的cocos2d-x-3.3-019-碰撞检测1-矩形区域是否相交全部内容,希望文章能够帮你解决cocos2d-x-3.3-019-碰撞检测1-矩形区域是否相交所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)