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

特点:

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. hbase 新增节点

    关于Hbase的集群管理 http://www.linuxidc.com/Linux/2012-07/65909.htm 1.如果只增加集群的存储量,建议增加Hadoop datanode节点. 方法 ...

  2. 第四章_PHP基本语法(2)

    1.常量的声明 在PHP中,定义常量使用define()函数来实现 2.魔术常量 名称 作用 __LINE__ 返回文件中的当前行号 __FILE__ 返回该文件的完整路径和文件名 __DIR__ 返 ...

  3. select 语句占位符

    对于已预备的语句,可以使用位置保持符.以下语句将从tb1表中返回一行: mysql> SET @a=1; mysql> PREPARE STMT FROM "SELECT * F ...

  4. Ubuntu工具:vi编辑器

    Vi简介 Vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样.它可以执行输出.删除.查找.替换.块操作等众多文本操作,而且用户可以根据自己的需要对 ...

  5. JQuery 的几个有用的技巧

    JQuery代码 /* 新窗口打开链接:JQuery filter attr * 禁止鼠标弹出右键菜单:DOM contextmenu * 回到页面顶端:DOM scrollTo * 动态更换Css样 ...

  6. IOS基础——实例变量四种范围类型

    1.为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性. 但是为了提供灵活性,苹果也让开发者显示设置范围(四选一). 2.四种编译指令如下: @private 实例变量只能被声 ...

  7. [leetcode]_Climbing Stairs

    我敢保证这道题是在今早蹲厕所的时候突然冒出的解法.第一次接触DP题,我好伟大啊啊啊~ 题目:一个N阶的梯子,一次能够走1步或者2步,问有多少种走法. 解法:原始DP问题. 思路: 1.if N == ...

  8. Python之定向爬虫Scrapy

    1.Scrapy介绍 Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. 共享内存shared pool (6):追踪sql语句

    构建实验数据 --使用NC50用户查询(会话1) SQL> conn NC50/NC50 Connected. SQL> create table emp as select * from ...

  10. 配置《算法 第四版》的Eclipse开发环境

    1. 安装JAVA JAVA网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 配置环境变量(我把JAVA安装在 ...