Manager类
1.定义为一个单例
创建了这个Manager的实例之后,Manager类不会释放这块申请的内存,而是由系统来回收!
//子弹和敌机管理器,做成单例
class Manager
{
public:
static Manager * getInstance();
static void freeInstance(void);
private:
static Manager * m_manager;
Manager();
bool init();
public:
//使用以下的方法定义了俩个容器,并且实现了get方法,一定要注意get的返回值,这个返回的是引用
Vector<EnemyBase *> & getEnemyVector(){return m_enemyVector;};
Vector<Bullet *> & getBulletVector(){return m_bulletVector;};
private:
Vector<EnemyBase *> m_enemyVector;
Vector<Bullet *> m_bulletVector;
};
注意这里的定义的两个get方法,返回的是vector的引用,引用vector不会拷贝vector里的内容。
2.使用vector的时候,注意get方法赋值的时候不加& 表示会复制一份vector数据给这个变量。
//从管理器中获得子弹和敌机的数组引用
auto & enemyVector = Manager::getInstance()->getEnemyVector();
auto & bulletVector = Manager::getInstance()->getBulletVector();
3. 控制飞机子弹,调用schedule和unschedule函数,注意c++里循环是-1,但是,js里循环是用的一个常量定义cc.REPEAT_FOREVER。
//发射双发子弹,持续时间是4s
this->schedule(SEL_SCHEDULE(&MainGame::addBulletByUfo),0.1f,40,0);
//停止单发子弹的发射
this->unschedule(SEL_SCHEDULE(&MainGame::addBullet));
//4s后再发射单发子弹
this->schedule(SEL_SCHEDULE(&MainGame::addBullet),0.1f,-1,4.0f);
//如果碰撞检测到了,则设置这个UFO为不可见,因为移除的工作会在UFO执行完动作以后进行