void GameScene::enemyTankShoot(float dt) { for (auto it=enemyTankVec.begin(); it!=enemyTankVec.end(); ++it) { EnemyTank* enemyTank = (EnemyTank*)(*it); int index = rand()%3; auto waitAct = DelayTime::create(index*0.005); Animate* aniAct = Animate::create(tankGunAnimation[enemyTank->getEnemyTankIndex()]); auto shootAct = CallFuncN::create(CC_CALLBACK_1(GameScene::addEnemyTankBullet, this)); enemyTank->enemyTankGun->runAction(Sequence::create(waitAct,aniAct,shootAct, NULL)); } for (auto it=barrierVec.begin(); it!=barrierVec.end(); ++it) { Barrier* barrier = (Barrier*)(*it); if (barrier->getBarrierIndex() == 5) { addBarrierBullet(barrier); } } }
void GameScene::addBarrierBullet(Node* node) { Barrier* barrier = (Barrier*)node; auto barrierBullet = Sprite::create(enemyName[barrier->getBarrierIndex()-1].c_str()); enemyBazooka->addChild(barrierBullet); barrierBullet->setPosition(barrier->getPosition()); float angle = 0.0; auto posDiff = Vec2(hero->tankBody->getPosition().x-barrier->getPosition().x,hero->tankBody->getPosition().y-barrier->getPosition().y); if (posDiff.x > 0) { angle = 90-atan(posDiff.y/posDiff.x)*180/pi; } else { angle = -atan(posDiff.y/posDiff.x)*180/pi-90; } auto moveAct = MoveTo::create(5, Vec2(barrier->getPosition().x+1024*posDiff.x,barrier->getPosition().y+800*posDiff.y)); barrierBullet->setRotation(angle); auto funcAct = CallFuncN::create(CC_CALLBACK_1(GameScene::removeEnemyTankBazooka, this)); barrierBullet->runAction(Sequence::create(moveAct,funcAct, NULL)); }