Esempio n. 1
0
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);
        }
    }
}
Esempio n. 2
0
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));
}