窗口协议 各个平台会继承这个类重写一个子类来具体实现窗口创建
本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(CCEGLViewProtocol.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
应用全屏参数,拉伸全屏,裁剪全屏,有黑色边框全屏
- ///cocos2d-x-3.0alpha0/cocos2dx/platform
- //应用全屏参数,拉伸全屏,裁剪全屏,有黑色边框全屏
- #ifndef __CCEGLVIEWPROTOCOL_H__
- #define __CCEGLVIEWPROTOCOL_H__
- #include "ccTypes.h"
- #include "event_dispatcher/CCEventTouch.h"
- #include <vector>
- enum class ResolutionPolicy
- {
- // 整个应用程序在指定区域中可见,而试图保持原始宽高比。
- // 可能会发生扭曲,应用程序可能会拉伸或压缩。
- EXACT_FIT,
- // 整个应用程序填满指定区域,不扭曲,但可能进行一些裁切,同时保持应用程序的原始宽高比。
- NO_BORDER,
- // 看到整个应用程序在指定区域不失真,同时保持应用程序的原始宽高比。双方的应用程序可能会显示边框。
- SHOW_ALL,
- // 该应用程序采用这个高度来,设计分辨率大小和修改内部画布的宽度,使其适合设备的纵横比没有会变形,但是你必须确保你的应用程序适用于不同的纵横比
- FIXED_HEIGHT,
- // 该应用程序采用这个宽度来,设计分辨率大小和修改内部画布的宽度,使其适合设备的纵横比没有会变形,但是你必须确保你的应用程序适用于不同的纵横比
- FIXED_WIDTH,
- UNKNOWN,
- };
- NS_CC_BEGIN
- class EGLTouchDelegate;
- /**
- * @addtogroup platform
- * @{
- */
- class CC_DLL EGLViewProtocol
- {
- public:
- /**
- * @js ctor
- */
- EGLViewProtocol();
- /**
- * @js NA
- * @lua NA
- */
- virtual ~EGLViewProtocol();
- /** 强制销毁EGL视图,子类必须实现此方法. */
- virtual void end() = 0;
- /** 获取OpenGL的渲染系统是否已准备好,子类必须实现此方法. */
- virtual bool isOpenGLReady() = 0;
- /**交换前后缓冲区,子类必须实现此方法. */
- virtual void swapBuffers() = 0;
- /** 打开或关闭输入法键盘,子类必须实现此方法. */
- virtual void setIMEKeyboardState(bool bOpen) = 0;
- /**
- * Polls(民意调查)的输入事件。如果平台不提供事件回调子类必须实现的方法
- */
- virtual void pollInputEvents();
- /**
- * 获取EGL视图帧大小。
- * 在一般情况下,它返回的屏幕尺寸因为EGL的 view 是全屏的 view
- */
- virtual const Size& getFrameSize() const;
- /**
- * 设置 EGL视图帧大小.
- */
- virtual void setFrameSize(float width, float height);
- /**
- * 获取 openGL的视图窗口的可见区域大小.
- */
- virtual Size getVisibleSize() const;
- /**
- * 获取 openGL的视图窗口原始可见区域大小
- */
- virtual Point getVisibleOrigin() const;
- /**
- * 设置分辨率样式大小
- * @param width 分辨率宽度样式
- * @param height 分辨率高度样式
- * @param resolutionPolicy 你可以根据需要选择所需要的分辨率:
- * [1] EXACT_FIT 通过 stretch-to-fit(拉伸)来填满屏幕: 如果分辨率式样的宽度、高度和屏幕的分辨率不同,会拉长你的游戏视图来适应屏幕
- * [2] NO_BORDER 全屏无黑色边框: 如果分辨率式样的宽度、高度和屏幕的分辨率不同,你游戏视图的两个区域会将被削减。
- * [3] SHOW_ALL 带有黑色边框的全屏: 如果分辨率式样的宽度、高度和屏幕的分辨率不同,两个黑色边框将显示.
- */
- virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);
- /** 获取分辨率式样大小.
- * D默认分辨率大小和 'getFrameSize' 是一样的.
- */
- virtual const Size& getDesignResolutionSize() const;
- /** 设置触摸委托 */
- virtual void setTouchDelegate(EGLTouchDelegate * pDelegate);
- /**
- * 使用 points 设置 OpenGL 视图窗口
- */
- virtual void setViewPortInPoints(float x , float y , float w , float h);
- /**
- * 使用 points 设置 削减矩形.
- */
- virtual void setScissorInPoints(float x , float y , float w , float h);
- /**
- * Get whether GL_SCISSOR_TEST is enable
- */
- virtual bool isScissorEnabled();
- /**
- * Get 当前削减矩形
- */
- virtual Rect getScissorRect();
- virtual void setViewName(const char* pszViewName);
- const char* getViewName();
- /** 触摸事件的处理,默认情况下,如果你想自定义您的处理程序,请重写这些函数 */
- 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[]);
- /**
- * Get OpenGL 视图窗口.
- */
- const Rect& getViewPortRect() const;
- /**
- * Get 水平方向的比例因子
- */
- float getScaleX() const;
- /**
- * Get 垂直方向的比例因子
- */
- float getScaleY() const;
- private:
- void handleTouchesOfEndOrCancel(EventTouch::EventCode eventCode, int num, int ids[], float xs[], float ys[]);
- protected:
- EGLTouchDelegate* _delegate;
- // 真实的屏幕尺寸
- Size _screenSize;
- // 分辨率的大小,它适应应用程序资源大小
- Size _designResolutionSize;
- // the view port size //视图窗口的大小
- Rect _viewPortRect;
- // the view name
- char _viewName[50];
- float _scaleX;
- float _scaleY;
- ResolutionPolicy _resolutionPolicy;
- };
- // end of platform group
- /// @}
- NS_CC_END
- #endif /* __CCEGLVIEWPROTOCOL_H__ */