cocos2d-x 3.2|飞机大战:技能
前情提要:飞机大战第四篇 实现敌机掉落技能
如下:
新建类----->Tool
第一步:技能类
Tool.h
#include <stdio.h>
#include "cocos2d.h"
using namespace cocos2d;
class Tool:public Node
{
public:
Sprite * sp;
CREATE_FUNC(Tool);
bool init();
static Tool * newTool(int type,int x,int y);
int tx,ty;
int type;
int times;
bool dirH,dirV;
void moveTo(int x,int y);
void update(float t);
};
Tool.cpp
#include "Tool.h"
Tool * Tool::newTool(int type,int x,int y)
{
Tool * nt=Tool::create();
switch (type) {
case 1://加血
nt->sp=Sprite::create("hp_2.png");
break;
case 2://炸雷
nt->sp=Sprite::create("hp_2.png");
break;
case 3://激光
nt->sp=Sprite::create("hp_2.png");
break;
case 4://散弹
nt->sp=Sprite::create("hp_2.png");
break;
}
nt->type=type;
nt->addChild(nt->sp);
nt->moveTo(x, y);
return nt;
}
void Tool::moveTo(int x,int y)
{
this->sp->setPosition(Vec2(x,y));
this->tx=x;
this->ty=y;
}
bool Tool::init()
{
if (!Node::init())
{
return false;
}
//计划任务 技能移动
dirH=true;
dirV=true;
times=0;
this->scheduleUpdate();
return true;
}
void Tool::update(float t)
{ //移动道具 每一帧都检测其所处位置
if (dirH) {
this->moveTo(tx+8, ty);
}else
{
this->moveTo(tx-8, ty);
}
if (dirV) {
this->moveTo(tx, ty+8);
}else
{
this->moveTo(tx, ty-8);
}
//出了最大或者最小宽度 其方向反向
if (tx<0 || tx>Director::getInstance()->getWinSize().width)
{
dirH=!dirH;
times++;
}
//出了最大或者最低高度 其方向反向
if (ty<0 || ty>Director::getInstance()->getWinSize().height)
{
dirV=!dirV;
times++;
}
if (times>4) {
this->removeFromParentAndCleanup(true);
}
}
总结:实现敌机掉落的技能类型