今天是做飞机游戏的第三天,实现了飞机的点击移动事件,以及子弹和飞机坐标的绑定。
飞机点击移动事件只是API 的引用。在子弹和飞机坐标绑定这一块比较重要。关键是要把飞机移动时的坐标传给子弹,让子弹始终拥有飞机的坐标
从而实现飞机发射子弹的视觉效果。程序中最重要的是有一个节点来接飞机坐标的数据,一共需要操作5个地方,子弹,h,子弹.cpp,飞机.h,飞机.cpp
GameScene.cpp。
1.飞机.h
在类中声明
static Hero* getInstance(); 静态创建成员函数
static Hero* plane; 静态创建成员变量
Node* getPlane(); 创建节点
Sprite* sp;创建精灵对象
2.飞机.cpp
Hero* Hero::plane = NULL;
Hero* Hero::getInstance(){
if (plane == NULL){
plane = new Hero();
}
return plane;
}
Node* Hero::getPlane(){
return sp;
}
Node* Hero::getPlane(){
return sp;
}
Node* Hero::getPlane(){
return sp;
}
Node* Hero::getPlane(){
return sp;
}
Node* Hero::getPlane(){
return sp;
}
3子弹.h
在类中声明构造函数,其参数为(Hero *p)
私有private:
Hello *plane =NULL;
4子弹.cpp
定义构造函数
Bult::Bult(Hero *p){
this->plane = p; // 将传入的数据给plane
visibleSize = Director::getInstance()->getVisibleSize();//获场景大小
this->schedule(CC_SCHEDULE_SELECTOR(Bult::update), 0.5f);
this->scheduleUpdate();
}
在最后用MoveTo生成子弹坐标的时候
auto move = MoveTo::create(1, Vec2(this->plane->getPlane()/*sp*/->getPositionX(), visibleSize.height + this->plane->getPlane()->getPositionY() + 100));
(this->plane->getPlane()取得的数据就是sp,即飞机的移动坐标。
5.GameScene.cpp
Hero *p = Hero::getInstance();
p->init()
Bult* p1=new Bult(p);
单例模式,一次创建以后可以一直使用再别的地方也可以使用,相当于全局变量