코코스2dx(17) 중 단일 관리 모델에 대한 간단한 설명

2663 단어
~~~~ 내 생활, 내 방울방울!!
먼저 관리자 모델이 무엇인지 명확히 하자. 관리 클래스는 관련 대상을 관리하는 클래스이다. 그는 방문 대상의 인터페이스를 제공한다. 이렇게 추상적으로 말하면 코코스2dx에 어떤 클래스가 관리 클래스인지 살펴보자. 예를 들어 TextureCache, Sprite FrameCache, AnimationCache 등은 모두 관리 클래스이다.Sprite Frame의 경우 이 클래스는 대상spriteframe을 관리합니다. 우리는 키를 제공하여 대응하는 값을 얻습니다. 예를 들어Animation Cache, Texture Cache는 모두 그렇지 않습니까? 키로 대응하는 값을 얻습니다.그래서 이런 종류를 모두 관리류라고 부른다. 왜냐하면 그들은 한 그룹의 관련 대상을 관리하기 때문이다.관리자 모델을 사용하는 이유는 하나는 관련 대상을 방문하기 위해 통일된 인터페이스를 제공했기 때문이고, 다른 하나는 게임을 캐시하는 자원을 사용하여 게임의 성능을 향상시키는 것이다. 상기 세 가지 유형이 바로 이런 역할이 아닌가. 다음은 이 모델을 실현하는 코드이다.
#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가 있는데 키 값이 맞는 방식으로 우리의 대상을 저장할 수 있다. 방문할 때 키를 통해 대응하는 대상 값을 되돌려준다. 코코스에서 우리는 그 캐시 클래스가 관리자 모드라는 것만 알면 된다. 우리가 Sprite FrameCache를 만들 때plist 파일을 제공한 것은 이 파일의 정보를 사용하여 대상을 만들어야 하기 때문이다.그리고sprite의 이름에 따라 만들어진 대상을 되돌려줍니다.나는 코코스에서 관리자 모델을 사용하는 데 가장 중요한 것은 효율을 높이고 우리가 사용하는 자원을 미리 캐시하는 것이라고 생각한다.
// , , 
 
    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");

위에서 보듯이 그ddImageAsync () 는 비동기적으로 불러오는 것이지만, 다른 사람이 말하는 것은 2.x 1.x일 때 전체 코코스 프로젝트는 하나의 단일 라인입니다. 만약에 대량의 그림을 불러오면 큰 모듈이 막힐 수 있습니다(이게 얼마나 아픈지). 그러나 여러분은 이 함수의 성명에 들어가서 보실 수 있습니다. 라인이 안전합니다.

좋은 웹페이지 즐겨찾기