战斗:
1.触摸层:
_hotZone = Layercolor::create(color4B(128,128,128)); _hotZone->setposition(Vec2(600,0)); //由于本游戏要求子d不能向后射,所以位置设置在这 _hotZone->settouchEnabled(true); _hotZone->setContentSize(visibleSize); addChild(_hotZone,0);2单点触摸
/**单点触摸**/ EventListenertouchOneByOne* Listener = EventListenertouchOneByOne::create(); Listener->setSwallowtouches(true); Listener->ontouchBegan = CC_CALLBACK_2(Battle::onPress,this); Listener->ontouchmoved = CC_CALLBACK_2(Battle::onMove,this); Listener->ontouchended = CC_CALLBACK_2(Battle::onRelease,this); _eventdispatcher->addEventListenerWithSceneGraPHPriority(Listener,this); _eventdispatcher->setPriority(Listener,1);//第二个参数是优先级,数值越小优先级越高3. 事件侦听
EventListenerCustom* bossShootListener = EventListenerCustom::create(BOSS_SHOOT,CC_CALLBACK_1(Battle::bossShoot,this)); _eventdispatcher->addEventListenerWithFixedPriority(bossShootListener,1);4. 碰撞
1).子d与士兵的碰撞
版本1:
Vector<Bullet*>::iterator itb = _bulletVec.begin(); while (itb != _bulletVec.end()) { Bullet* itbullet = (*itb); Vector<SoldIEr*>::iterator its = _soldIErVec.begin(); bool flag = false; while (its != _soldIErVec.end()) { SoldIEr* itsoldIEr = (*its); if (itsoldIEr->hit(itbullet->getposition())) { <span > </span>flag = true; int Nowlife = itsoldIEr->hurt(); if (Nowlife <= 0) { itsoldIEr->dIE(); its = _soldIErVec.erase(its); } itbullet->resetBullet(); itb = _bulletVec.erase(itb); break; } else { its++; } } if (!flag) { ++itb; } }版本2:
for (Node* a : _bulletVec) { Bullet* bullet = (Bullet*)a; Rect bulletRect = bullet->getRect(); for (Node* b : _soldIErVec) { SoldIEr* soldIEr = (SoldIEr*)b; Rect soldIErRect = soldIEr->getRect(); if (bulletRect.intersectsRect(soldIErRect)) { if (!bullet->getHurtObj()) { if (soldIEr->hurt(bullet->getdamage()))//在hurt函数中判断是否死亡 { bullet->setHurtObj(soldIEr); _soldIErVec.eraSEObject(soldIEr); return; } bullet->setHurtObj(soldIEr); } else { if (bullet->getHurtObj() != soldIEr) { if (soldIEr->hurt(bullet->getdamage())) { _soldIErVec.eraSEObject(soldIEr); } bulletBoom(bullet); //爆炸效果 return; } } } } }2)子d和boss碰撞(与上述的类似)
for (Node* a : _bulletVec) { Bullet* bullet = (Bullet*)a; Rect bulletRect = bullet->getRect(); for (Node* b : _bossvec) { Boss* boss = (Boss*)b; Rect bossRect = boss->getRect(); if (bulletRect.intersectsRect(bossRect)) { if (boss->hurt(bullet->getdamage())) { _bossvec.eraSEObject(boss); } bulletBoom(bullet); _bulletVec.eraSEObject(bullet); return; } } }3)地方子d与武将碰撞
for (Node* a : _enemyBulletVec) { Bullet* bullet = (Bullet*)a; Rect bulletRect = bullet->getRect(); Rect bossRect = _general->getRect(); if (bulletRect.intersectsRect(bossRect)) { _general->hurt(bullet->getdamage()); bulletBoom(bullet); _enemyBulletVec.eraSEObject(bullet); return; } }总结
以上是内存溢出为你收集整理的工作总结6(随时修改)全部内容,希望文章能够帮你解决工作总结6(随时修改)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)