#include "Bullet.h" #include "Player.h" #include "BasicEnemy.h" USING_NS_CC; bool Bullet::initWithFile(const std::string& filename){ if (!Sprite::initWithFile(filename)){ return false; } _enemyTarget = nullptr; _speed = 160; //invisible por defecto setVisible(false); schedule(schedule_selector(Bullet::update)); return true; } Bullet* Bullet::createPlayerBullet(){ Bullet *sprite = new (std::nothrow) Bullet(); if (sprite && sprite->initWithFile("disparo_nave.png")) { sprite->_type = PLAYER_BULLET; sprite->autorelease(); return sprite; } CC_SAFE_DELETE(sprite); return nullptr; } Bullet* Bullet::createEnemyBullet(){ Bullet *sprite = new (std::nothrow) Bullet(); if (sprite && sprite->initWithFile("disparo_enemigo.png")) { sprite->_type = ENEMY_BULLET; sprite->autorelease(); return sprite; } CC_SAFE_DELETE(sprite); return nullptr; } void Bullet::update(float dt){ if (!this->isVisible()) return; if (_type == PLAYER_BULLET){ //para arriba setAnchorPoint(Point(0.5, 0)); setPosition(getPositionX(), getPositionY() + _speed*dt); if (getPositionY() > Director::getInstance()->getVisibleSize().height){ setVisible(false); } for (int i = 0; i < _playerTargets.size(); i++){ BasicEnemy* enemy = _playerTargets.at(i); if (getBoundingBox().intersectsRect(enemy->getBoundingBox()) && enemy->isVisible() && enemy->getCurrentAnimation() != BasicEnemy::Animations::EXPLOSION){ //colision enemy->setCurrentAnimation(BasicEnemy::Animations::EXPLOSION); setVisible(false); } } } else if (_type == ENEMY_BULLET){ //para abajo setAnchorPoint(Point(0.5, 1)); setPosition(getPositionX(), getPositionY() - _speed*dt); if (getPositionY() < 0){ setVisible(false); } if (getBoundingBox().intersectsRect(_enemyTarget->getBoundingBox()) && _enemyTarget->isVisible() && _enemyTarget->getCurrentAnimation() != BasicEnemy::Animations::EXPLOSION){ //colision _enemyTarget->setCurrentAnimation(Player::Animations::EXPLOSION); setVisible(false); } } }