浅谈cocos2dx(17) 中单例管理模式
~~~~我的生活,我的点点滴滴!。
首先明白一个问题。什么是管理者模式,管理类是用来管理一组相关对象的类,他提供了訪问对象的接口,假设这么说比較抽象的话。我们来看下cocos2dx中都有哪些类是管理类你就会非常明白了,比如TextureCache, SpriteFrameCache, AnimationCache,这些类都是管理类。
就拿SpriteFrame来说。这个类管理了对象spriteframe,我们通过提供一个键来获得相应的值。像AnimationCache,TextureCache不都是这样吗,用一个键来获取相应的值。
所以这些类都叫做管理类。由于他们管理着一组相关的对象。之所以使用管理者模式一个是由于为訪问相关对象提供了统一的接口。还有一个就是缓存游戏用到的资源,提高游戏的性能,以上的三个类不正是这种作用吗,下面是实现这个模式的代码。
#ifndef _MANAGER_PATTERN_H_
#define _MANAGER_PATTERN_H_
#include "cocos2d.h" USING_NS_CC; class ManagerPattern
{
public:
static ManagerPattern * getInstance()
{
if(m_manager == NULL)
{
m_manager = new ManagerPattern();
m_dictionary = new Dictionary();
m_dictionary->retain();
}
return m_manager;
};
static void freeInstance()
{
CC_SAFE_DELETE(m_manager);
CC_SAFE_RELEASE_NULL(m_dictionary);
};
void registeInstance(const std::string& key,CCObject *obj)
{
m_dictionary->setObject(obj,key);
};
CCObject* getObject(const std::string& key)
{
return m_dictionary->objectForKey(key);
}; private:
static ManagerPattern * m_manager;
static Dictionary * m_dictionary;
}; ManagerPattern * ManagerPattern::m_manager = NULL;
Dictionary *ManagerPattern::m_dictionary = NULL;
以上的管理者类使用了单例。内部有一个Dictionary。用来以键值对的方式存储我们的对象,訪问的时候通过一个键,返回相应的对象值,在cocos中我们仅仅须要明确那些缓存类事实上就是管理者模式就能够了。我们创建SpriteFrameCache的时候之所以提供了一个plist文件就是由于它要使用这个文件的信息来创建对象。然后依据sprite的名称来返回创建好的对象。我觉得在cocos中使用管理者模式最重要的就是提高了效率,提前缓存了我们使用的资源。
//几个管理类的使用方法。初始化都是通过键值对的方式。而获取对象则是传入一个键
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("1.plist");
auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName("test");
auto callback = [](Ref *){};
TextureCache::getInstance()->addImageAsync("test.png",callback);
auto texture2d = TextureCache::getInstance()->getTextureForKey("test.png");
AnimationCache::getInstance()->addAnimation(Animation::create(),"test");
AnimationCache::getInstance()->getAnimation("test");
上面看那个addImageAsync() 是异步载入,可是听人说在2.x 1.x的时候,整个cocos项目就是一个单线程的。假设载入大量图片,大模块时会堵塞(这有多蛋疼) ,可是大家能够进入这个函数的声明中看,是线程安全的。
浅谈cocos2dx(17) 中单例管理模式的更多相关文章
- 浅谈:redis的主从复制 + 哨兵模式
浅谈:redis的主从复制 + 哨兵模式 主从模式 在谈论redis的主从复制之前,我们先回想下mysql的主从搭建过程,第一步呢首先要在主库服务器中修改my.cnf,开启一下bin_log功能, ...
- 浅谈cocos2dx(18) 中工厂模式
----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...
- 浅谈JavaScript中的内存管理
一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- 浅谈 JS 创建对象的 8 种模式
1.Object 模式 var o1 = {};//字面量的表现形式 var o2 = new Object; var o3 = new Object(); var o4 = new Object(n ...
- 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)
软件开发的目的是在规定成本和时间前提下,开发出具有适用性.有效性.可修改性.可靠性.可理解性.可维护性.可重用性.可移植性.可追踪性.可互操作性和满足用户需求的软件产品. 而对于整个开发过程来说,开发 ...
- 浅谈正则表达式-PHP为例
第一次比较系统的学习正则表达式,本篇文章以PHP语言为例来学习. 基本概念 正则表达式=普通字符(如a-z)+分隔符(正斜线(/).hash符号(#) 以及取反符号(~))+特殊字符(称为元字符) 两 ...
- 浅谈DAO工厂设计模式(工厂模式的好处)
随着软件分层设计的流行及广泛的应用,对于DAO的设计模式大家已经不再陌生了,DAO层已经在软件系统的开发中成为必不可少的一层,将后台的数据层和前台的VO进行分离.前段时间也针对于DAO的设计介绍过一个 ...
- 【Linux】浅谈段页式内存管理
让我们来回顾一下历史,在早期的计算机中,程序是直接运行在物理内存上的.换句话说,就是程序在运行的过程中访问的都是物理地址.如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存 ...
随机推荐
- 利用阿里云加速Docker For Windows
1.进入阿里云的容器镜像服务,找到镜像中心的镜像加速器. https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.进入Docker ...
- Jsoup的简单的使用示例
利用Jsoup中的相关方法实现网页中的数据爬去,本例子爬去的网页为比较流行的programmableweb中的mashup描述内容,然后为数据库中存在的mashup添加相应的描述. package c ...
- Python笔记(九)
#encoding=utf-8 # python高级编程 # python面向对象 # 创建类 # 无意中把Visual Studio Code的窗口调小了,查了一下,可以使用Ctrl+=放大窗口,使 ...
- Android--XML页面的编写
五个页面 代码如下: 图片资源链接: https://pan.baidu.com/s/1jIoTDGE // 第一个 <RelativeLayout xmlns:andr ...
- levelDB数据库使用及实例 - 高性能nosql存储数据库
LevelDB是google公司开发出来的一款 超高性能kv存储引擎,以其惊人的读性能和更加惊人的写性能在轻量级nosql数据库中鹤立鸡群. 此开源项目目前是支持处理十亿级别规模Key-Value型数 ...
- 数据仓库模型建设基础及kimball建模方法总结
观察数据的角度称之为维.决策数据市多为数据,多维数据分析是决策分析的组要内容. OLAP是在OLTP的基础上发展起来的,OLTP是以数据库为基础的,面对的是操作人员和底层管理人员,对基本数据进行查询和 ...
- Verilog之$sreadmemb
1 Memories Memories file format is shown below, the address is specified as @ <address> in he ...
- kinect:0x80080014
changed to 0x83010014 aka E_NUI_NOTCONNECTED? kinect识别问题,重启一下,就可以了.
- RabbitMQ学习之ConntectionFactory与Conntection的认知
在发送和接收消息重要的类有:ConnectionFactory, Connection,Channel和 QueueingConsumer. ConntectionFactory类是方便创建与AMQP ...
- js prototype 原型
//https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9%E8%B1%A1%E7%9A%84%E4% ...