飞机产生的子弹其实可以看成一个子弹的图在飞机上的坐标产生,之后向上移动,到出屏幕之后在消失掉,弹幕就是每个一定的时间就自动产生一个子弹,子弹自己y中方向移动。
class Butter:public Node
{
public:
CREATE_FUNC(Butter);
bool init();
int px,py;
int type;
int level;
Sprite *sp;
static Butter * newButter(int type,int level,int x,int y);
void moveTo(int x, int y);
};
bool Butter::init()
{
if (!Node::init()) {
return false;
}
this->sp=nullptr;
return true;
}
Butter * Butter::newButter(int type,int level,int x,int y)
{
Butter *newButter=Butter::create();
switch (type) {
case 1:
newButter->sp=Sprite::create("img_cloud_1.png");
break;
case 2:
newButter->sp=Sprite::create("img_bullet1.png");
break;
case 3:
newButter->sp=Sprite::create("img_bullet2.png");
break;
}
newButter->addChild(newButter->sp);
newButter->moveTo(x, y);
return newButter;
}
void Butter::moveTo(int x, int y)
{
this->sp->setPosition(Vec2(x,y));
this->px=x;
this->py=y;
}
this->schedule(schedule_selector(Game::newButter),1);
this->schedule(schedule_selector(Game::movButter),0.5);
void Game::newButter(float t)
{
auto plane=(Plane *)this->getChildByTag(110);
Butter *nb=Butter::newButter(3, 0, plane->px, plane->py);
allButter.pushBack(nb);
this->addChild(nb);
}
void Game::movButter(float t)
{
for (int i=0; i<allButter.size(); i++) {
Butter * nowB=allButter.at(i);
nowB->moveTo(nowB->px, nowB->py+100);
if (nowB->py>Director::getInstance()->getWinSize().height) {
allButter.erase(i);
this->removeChild(nowB);
i--;
}