cocos2d-x中的单例

来源:互联网 发布:网络捕鱼游戏随机算法 编辑:程序博客网 时间:2024/04/28 14:16

CCDirector (导演)

通过以下几个方法可以管理场景CCScene

1.void  runWithScene(CCScene * scene)

   将场景入栈,并激活。(只适用于整个App的第一个CCScene)

2.void replaceScene(CCScene * scene)

新场景入栈,并激活,旧场景出栈并释放。

3.void pushScene(CCScene * scene)

新场景入栈,并激活。(激活CCScene就是开始执行CCScene中所有CCNode的onEnter draw ..... 你懂的)

4.void popScene()

出栈,既然是栈肯定是后进先出。

5。void pause()

暂停场景渲染和活动

6。void resume()

恢复场景渲染和活动


CCEGLView(渲染)

原:http://blog.csdn.net/itcastcpp/article/details/18569413

继承关系

CCEGLView-> CCEGLViewProtocol

CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以学习CCEGLView,主要是要学习CCEGLViewProtocol中定义的接口。


类主要成员

CCEGLView();

构造函数,初始化所有成员变量。


virtual void end();

删除窗口,做窗口清理工作


virtual bool    isOpenGLReady();

判断是否可以绘图


virtual void    swapBuffers();

交换buffer


virtual void    setIMEKeyboardState(bool bOpen)

设置输入法状态


virtual void setFrameSize(float width, float height);

virtual const CCSize& getFrameSize() const;

设置和获取窗口大小


virtual CCSize getVisibleSize() const

virtual CCPoint getVisibleOrigin() const

获取可见区域的原点和大小


virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);

virtual const CCSize&  getDesignResolutionSize() const;

设置设计的size,当需要适配多种设备时,可以用这个函数定义逻辑坐标,cocos2dx会自动将逻辑坐标转化成实际坐标

这样一样的代码可以适配各种设备分辨率。


virtual void setTouchDelegate(EGLTouchDelegate * pDelegate);

设置触摸代理,触摸代理有虚函数处理触摸事件,我们需要重写触摸处理虚函数即可,一般的实现是在CCLayer中


virtual void handleTouchesBegin(int num, int ids[], float xs[], float ys[]);

virtual void handleTouchesMove(int num, int ids[], float xs[], float ys[]);

virtual void handleTouchesEnd(int num, int ids[], float xs[], float ys[]);

virtual void handleTouchesCancel(int num, int ids[], float xs[], float ys[]);

触摸处理函数,可以重载


static CCEGLView* sharedOpenGLView();

获得单例的窗口指针,如果没有则创建,源代码如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. CCEGLView* CCEGLView::sharedOpenGLView()  
  2. {  
  3.     
  4.     if (s_pEglView == NULL)  
  5.     {  
  6.         s_pEglView = new CCEGLView();  
  7.         if(!s_pEglView->Create())  
  8.         {  
  9.             delete s_pEglView;  
  10.             s_pEglView = NULL;  
  11.         }  
  12.     }  
  13.   
  14.     return s_pEglView;  
  15. }  
从代码中可以看到,单例唯一的对象保存在s_pEglView中。


总结

CCEGLView是显示窗口,负责窗口级别的功能管理和实现,包括:

1)坐标和缩放管理

2)画图工具

3)按键事件

4)输入法



CCSpriteFrameCache(plist)

如果很多图片很小或常用,可以使用CCSpriteFrameCache,来避免资源被反复加载。


SimpleAudioEngine(声音)

原:http://blog.csdn.net/aa4790139/article/details/8140083

第一步:预加载背景音乐和音效

 // 预加载背景音乐和音效:相对路径 .mid和.wav等格式文件

  SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic( CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE) );
    SimpleAudioEngine::sharedEngine()->preloadEffect( CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE) );

第二步:控制声音

1、背景音乐控制方法:

//播放背景音乐

        //MUSIC_FILE就是音乐文件相对Resources文件夹的相对路径下的文件名,然后再转换为绝对路径,第二个参数就是是否循环播放
        SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(MUSIC_FILE)).c_str(), true);

//停止背景音乐播放
        SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();

//暂停背景音乐播放
        SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();

//继续背景音乐播放
        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();

//重新播放背景音乐
        SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();

//背景音乐是否正在播放

       SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()

//增大背景音乐音量
        SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() + 0.1f);

 //减小背景音乐音量
        SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume() - 0.1f);

2、音效控制方法:

//播放音效1
        m_nSoundId = SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str());

//播放音效2
        m_nSoundId = SimpleAudioEngine::sharedEngine()->playEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str(), true);

 //停止播放音效(注意:如果没有播放,你就别停在,因为播都没播,你停啥啊~  其他处理也一样...呵呵  多说了)
        SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);

//暂停音效播放
        SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);

 //继续音效播放
        SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);

//暂停所有音效
        SimpleAudioEngine::sharedEngine()->pauseAllEffects();

//继续所有音效
        SimpleAudioEngine::sharedEngine()->resumeAllEffects();

//停止所有音效
        SimpleAudioEngine::sharedEngine()->stopAllEffects();

//卸载音效
        SimpleAudioEngine::sharedEngine()->unloadEffect(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(EFFECT_FILE)).c_str());

//增大音效音量
        SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() + 0.1f);

 //减小音效音量
        SimpleAudioEngine::sharedEngine()->setEffectsVolume(SimpleAudioEngine::sharedEngine()->getEffectsVolume() - 0.1f);

第三步:释放声音

SimpleAudioEngine::sharedEngine()->end();


CCAnimationCache(动画)


CCTouchDispatcher(触摸的派发器)


CCTextureCache

0 0