#include "EnemyBulletSmart.h" #include "Player.h" USING_NS_CC; bool EnemyBulletSmart::init(){ if (!Sprite::init()){ return false; } setSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("disparo_persecutor")); _enemyTarget = nullptr; _speed = 130; setVisible(false); schedule(schedule_selector(EnemyBullet::update)); return true; } void EnemyBulletSmart::update(float dt){ if (!this->isVisible()) return; //hacer que el sprite rote como una estrella ninja setRotation(getRotation() + 360 / 0.5 * dt); if (getPositionY()+getBoundingBox().size.height*0.5 < 0){ setVisible(false); } if (getBoundingBox().intersectsRect(_enemyTarget->getBoundingBox()) && _enemyTarget->isVisible() && _enemyTarget->getCurrentAnimation() != Player::Animations::EXPLOSION){ //colision _enemyTarget->setHealth(_enemyTarget->getHealth() - 1); _enemyTarget->runHitEffect(); setVisible(false); } } void EnemyBulletSmart::setVisible(bool visible) { Sprite::setVisible(visible); if (visible){ //si la bala se activa (es disparada) se dirigira //a la posicion del jugador. _targetPosition = _enemyTarget->getPosition(); if (getPositionY() < _targetPosition.y || !_enemyTarget->isVisible()){ _targetPosition = getPosition(); } auto moveTo = MoveTo::create(3, Point(_targetPosition.x, 0 - getBoundingBox().size.height)); moveTo->setTag(0); runAction(moveTo); } else{ //si se desactiva la bala para la accion. stopActionByTag(0); } }