分享免费的编程资源和教程

网站首页 > 技术教程 正文

微信打飞机项目小结-管理子弹和敌人类

goqiw 2024-09-25 20:22:42 技术教程 21 ℃ 0 评论

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执行完动作以后进行

————————————————

版权声明:本文为CSDN博主「sylalak123」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yejinxiong001/article/details/95462411

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表