cocos2dx进阶学习之CCEGLView

时间:2023-03-08 22:04:59
cocos2dx进阶学习之CCEGLView

继承关系

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();

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

CCEGLView* CCEGLView::sharedOpenGLView()
{ if (s_pEglView == NULL)
{
s_pEglView = new CCEGLView();
if(!s_pEglView->Create())
{
delete s_pEglView;
s_pEglView = NULL;
}
} return s_pEglView;
}

从代码中可以看到,单例唯一的对象保存在s_pEglView中。

总结

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

1)坐标和缩放管理

2)画图工具

3)按键事件

4)输入法