cocos中常用到的单例模式
单例:即只有一个类对象,且提供全局的访问权限
特点:
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中常用到的单例模式的更多相关文章
- 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 ...
- [ 转载 ] Java中常用的设计模式
Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个 ...
- Spring中常用的23中设计模式
1.spring 中常用的设计模式有23中 分类 设计模式 创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...
- Java中常用的设计模式代码与理解
Java中常用的设计模式代码与理解 一.单例模式 1.饿汉式 (太饿了,类加载的时候就创建实例) /** * 饿汉式单例模式 */ public class HungrySingleInstance ...
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- J2EE项目开发中常用到的公共方法
在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...
- 工作中常用的js、jquery自定义扩展函数代码片段
仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...
- 【转载】Linux中常用操作命令
说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...
- 【Unity3d游戏开发】Unity3D中常用的物理学公式
马三最近在一直负责Unity中的物理引擎这一块,众所周知,Unity内置了NVIDIA公司PhysX物理引擎.然而,马三一直觉得只会使用引擎而不去了解原理的程序猿不是一位老司机.所以对一些常用的物理学 ...
随机推荐
- Sublime 3114 + 转换GBK方法
下载地址: http://files.cnblogs.com/files/wuyifu/Sublime_Text_Build_3114_x64_Setup.zip -– BEGIN LICENSE - ...
- Promise机制
Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...
- wifi热点共享 3G网络
本文描述一些iptables的基础知识和使用方法.最后记录一个wifi共享3G上网,以及禁止wifi内某个IP通过3G联网的例子. 一. 在Linux系统中,防火墙,网址转换(NAT),数据包记录以及 ...
- CSS优先级算法是如何计算?
CSS的specificity特性或非凡性,它是一个衡量css优先级的一个标准, 既然的标准就有判定规定和计算方式,specificity用一个四位数来表示, 更像四级从左到右,左的最大级,一级大于一 ...
- silverlight水印
1.自定义类 using System; using System.Net; using System.Windows; using System.Windows.Controls; using Sy ...
- centos6.7下编译安装lamp环境
编译C源代码: 前提:提供开发工具及开发环境 通过“包组”提供开发组件,CentOS 6: "Development Tools", "Server Platform D ...
- 服务器下自动备份MySQL
Linux下 service crond restart */ * * * * /home/mysqlbackup.sh >/home/runssh.log backup.sh #bin/bas ...
- Jquery数组操作技巧
Jquery对数组的操作技巧. 1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍 jQuery 对象的 $.each() 方法,此方法可用于例遍任何对象(不 ...
- 重拾C,一天一点点_10
来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上天凉了,现在手感觉凉的有点 ...
- 7)Java数据类型
Java中的数据类型分为基本数据类型和引用数据类型: 1)基础数据类型有: boolean, byte.short.char, int.float.long, dou ...