单例:即只有一个类对象,且提供全局的访问权限

特点:

1.构造函数私有

2.私有的静态成员指针,标识是否已产生了单例实例

3.提供一个getInstance()方法来获取单例对象

下面已打飞机中的子弹管理类来说明,单例的用法及实现:

#ifndef _MANAGER_H_
#define _MANAGER_H_
#include "cocos2d.h";
//包含敌机和子弹的头文件
#include "Bullet\Bullet.h";
#include "Enemy\EnemyBase.h"; USING_NS_CC; //子弹和敌机管理器,做成单例
class Manager
{
public:
static Manager * getInstance();
static void Manager::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;
}; #endif

子弹管理类的.cpp文件

#include "Manager.h"

Manager * Manager::m_manager = NULL;

//在构造函数的初始化列表中初始化数组
Manager::Manager() : m_enemyVector(),m_bulletVector()
{
} Manager * Manager::getInstance()
{
if(m_manager == NULL)
{
m_manager = new Manager();
} return m_manager;
} void Manager::freeInstance(void)
{
if(m_manager != NULL)
{
delete m_manager;
m_manager = NULL;
}
}

3.在主场景中如何使用单例来管理子弹:

//场景切换完毕调用
void MainGame::onEnterTransitionDidFinish()
{
//必须先调用父类的函数
Layer::onEnterTransitionDidFinish();
//添加敌机,每秒添加一个
this->schedule(SEL_SCHEDULE(MainGame::addEnemy),1.0f);
//添加子弹,每0.08秒产生一颗子弹
this->schedule(SEL_SCHEDULE(MainGame::addBullet),0.08f);
//碰撞检测
this->schedule(SEL_SCHEDULE(MainGame::isHitEnemy),0.016f);
} //碰撞检测
void MainGame::isHitEnemy(float tm)
{ } //添加子弹
void MainGame::addBullet(float tm)
{
auto bullet = Bullet::create();
bullet->initBullet("bullet1.png");
auto point = Point(m_player->getPositionX(),
m_player->getPositionY()+m_player->getContentSize().height/+);
bullet->setPosition(point); this->addChild(bullet);
//将子弹添加到管理器中
auto & vector = Manager::getInstance()->getBulletVector();
vector.pushBack(bullet);
log("%d",vector.size());
}

cocos中常用到的单例模式的更多相关文章

  1. Java中的五种单例模式实现方法

    [代码] Java中的五种单例模式实现方法   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...

  2. [ 转载 ] Java中常用的设计模式

    Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个 ...

  3. Spring中常用的23中设计模式

    1.spring 中常用的设计模式有23中  分类  设计模式  创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...

  4. Java中常用的设计模式代码与理解

    Java中常用的设计模式代码与理解 一.单例模式 1.饿汉式 (太饿了,类加载的时候就创建实例) /** * 饿汉式单例模式 */ public class HungrySingleInstance ...

  5. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  6. J2EE项目开发中常用到的公共方法

    在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...

  7. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  8. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  9. 【Unity3d游戏开发】Unity3D中常用的物理学公式

    马三最近在一直负责Unity中的物理引擎这一块,众所周知,Unity内置了NVIDIA公司PhysX物理引擎.然而,马三一直觉得只会使用引擎而不去了解原理的程序猿不是一位老司机.所以对一些常用的物理学 ...

随机推荐

  1. Jmeter笔记2:参数化(五种方法)

    案例:邮箱登录操作,参数化登录的用户名 方法一.依赖Jmeter自带的函数助手 选项-->函数助手对话框,即可打开函数助手弹窗 (1)比如使用函数_Random 输入最小值.最大值,点击下方的[ ...

  2. EnCase v7 search hits in compound files?

    I used to conduct raw search in EnCase v6, and I'd like to see if EnCase v7 raw search could hit key ...

  3. CentOS学习笔记--JDK安装

    JDK安装 大部分的服务都离不开JAVA环境,CentOS里都是OpenJDK,显然我们还是使用JAVA的JDK好.(注:minimal版没有安装OpenJDK,其它版本需要删除这个.) JDK下载 ...

  4. POJ C++程序设计 编程作业—类和对象 编程题#1

    编程题#1 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面程序输出的结 ...

  5. foreach 和 list.foreach 初步测试

    单纯从速度上讲 小数据量下foreach 较快,list.Foreach 由于 public void ForEach(Action<T> action) { ; i <this._ ...

  6. 深入PHP empty(),isset(),is_null()

    PHP empty(),isset(),is_null()的实例测试.   有关 PHP编程 的 empty(),isset() 还有 is_null() 这三个函数的用法讨论得已经很多了,而且很多资 ...

  7. 什么是PHP魔术引号

    今天在读EcShop的源码中发现里面有几个地方涉及到了PHP魔术引号,之前也碰到过都忽略过去了,再次碰到该深入的理解,虽然自PHP 5.3.0 起魔术引号被废弃废弃并将自 PHP 5.4.0 起移除, ...

  8. seeting菜单界面形成--优化

    本文是上一篇文章的优化版: 上文链接地址:http://www.cnblogs.com/zzw1994/p/5016864.html 上文中有很多方法都是过时,并且效率不是很高,主要对JAVA代码进行 ...

  9. String类的比较

    //strcmp只能运用于数组的比较 //string类可以用成员函数compare() //即a.compare(b) //例如 "; "; a.compare(b)返回值= & ...

  10. Delphi的"Invalid pointer operation"异常的解决办法

    今天用Delphi编写了个dll,用到了TStringList来传递多参数,如下: [delphi] view plaincopy 01.function DBM_SetParam(procName: ...