#include "Player.h"
USING_NS_CC;
bool Player::init(){
//primero la superclase
if (!Sprite::init())
{
return false;
}
_speed = 150;
_currentAnimation = IDLE;
_controller = TouchController::create();
addChild(_controller);
createIdleAnimation();
createExplosionAnimation();
//lanzamos la animacion por defecto
runAction(_idleAnimation);
return true;
}
void Player::createIdleAnimation(){
//creamos un pool de imagenes para la animacion
Vector animFrames;
auto acc = 0;
for (int i = 0; i < 4; i++){
auto frame = SpriteFrame::create("animacion_nave.png", Rect(acc, 0, 50, 63));
acc += 50;
animFrames.pushBack(frame);
}
//si ninguna animacion esta corriendo el esprite por defecto es definido aqui
this->setSpriteFrame(animFrames.at(0));
//creamos una animacion con un tiempo de espera entre cada frame de 0.25s
auto animation = Animation::createWithSpriteFrames(animFrames, 0.25f);
//creamos la accion de animar el objeto animation
auto animate = Animate::create(animation);
//creamos una accion que repita para siempre la animacion
_idleAnimation = RepeatForever::create(animate);
// ponemos un tag a la animacion para poder pararla en el futuro
_idleAnimation->setTag(Player::Animations::IDLE);
}
void Player::createExplosionAnimation(){
Vector animFrames;
auto acc = 0;
for (int i = 0; i < 4; i++){
auto frame = SpriteFrame::create("player_explosion.png", Rect(acc, 0, 50, 63));
acc += 50;
animFrames.pushBack(frame);
}
auto animation = Animation::createWithSpriteFrames(animFrames, 0.15f);
//creamos la accion de animar el objeto animation, en este caso no necesitamos
//un RepeatForever porque solo debe explotar una vez y parar.
_explosionAnimation = Animate::create(animation);
_explosionAnimation->setTag(Player::Animations::EXPLOSION);
}
void Player::update(float dt){
float speed = _speed*dt;
auto controller = _controller->getController();
if (controller.upRight){
setPosition(getPositionX() + speed, getPositionY() + speed);
}
else if (controller.upLeft){
setPosition(getPositionX() - speed, getPositionY() + speed);
}
else if (controller.downRight){
setPosition(getPositionX() + speed, getPositionY() - speed);
}
else if (controller.downLeft){
setPosition(getPositionX() - speed, getPositionY() - speed);
}
else if (controller.left){
setPositionX(getPositionX() - speed);
}
else if (controller.right){
setPositionX(getPositionX() + speed);
}
else if (controller.down){
setPositionY(getPositionY() - speed);
}
else if (controller.up){
setPositionY(getPositionY() + speed);
}
}