本文来自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__ */