cocos2d-x节点(CCEGLViewProtocol.h)API

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值