cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。
来源:互联网 发布:golang效率 编辑:程序博客网 时间:2024/04/29 12:25
和以前的版本不太一样,每当我们打开cocos2d-x3.0的新建工程时,都会看到其中加载的图片比较小,只占据了大概四分之一的空间,如下图所示:
视觉效果不太好,我就喜欢把它调整为全屏幕显示,且能够自动适应与各种不同的分辨率下,于是就找着了相关的代码,发现和以前的版本设置还是有一定的区别。不过核心内容没有变化。由于网上没有新版本的资料,相关的个别信息也很很系统和完整,自己研究了搞清楚了还是决定写出来归纳下。
可以在AppDelegate::applicationDidFinishLaunching()的方法中先获取导演类的单例,然后通过导演类的单例获取glview对象,即为openglview对象,如果不存在(glview为空),就重新创建一个,如下代码所示
auto director =Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview =GLView::create("My Game");
director->setOpenGLView(glview);
}
在setOpenGLView(glview)函数对进行了设置_openGLView,其中包括很多配置信息,含有取得我们设置屏幕大小适配相关的函数_winSizeInPoints = _openGLView->getDesignResolutionSize(),在里面取出来了我们可以设置的分辨率配置信息。
代码如下所示:
void Director::setOpenGLView(GLView *openGLView){ CCASSERT(openGLView, "opengl view should not be null"); if (_openGLView != openGLView) {// Configuration. Gather GPU infoConfiguration *conf = Configuration::getInstance();conf->gatherGPUInfo(); CCLOG("%s\n",conf->getInfo().c_str()); if(_openGLView) _openGLView->release(); _openGLView = openGLView; _openGLView->retain(); // set size _winSizeInPoints = _openGLView->getDesignResolutionSize(); createStatsLabel(); if (_openGLView) { setGLDefaultValues(); } _renderer->initGLView(); CHECK_GL_ERROR_DEBUG(); if (_eventDispatcher) { _eventDispatcher->setEnabled(true); } }}
下面是取出配置方案的函数代码,
const Size& GLViewProtocol::getDesignResolutionSize() const { return _designResolutionSize;}
其中的_designResolutionSize是通过GLViewProtocol::setDesignResolutionSize()函数设置的,而这个函数是设置自动适配分辨率大小的关键函数,代码如下所示:
void GLViewProtocol::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy){ CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNOWN, "should set resolutionPolicy"); if (width == 0.0f || height == 0.0f) { return; } _designResolutionSize.setSize(width, height); _resolutionPolicy = resolutionPolicy; updateDesignResolutionSize(); }
其中包括宽高和重要的适配策略ResolutionPolicy,作为一个枚举类型,包括了如下方案:
enum class ResolutionPolicy{ EXACT_FIT, NO_BORDER, SHOW_ALL, FIXED_HEIGHT, FIXED_WIDTH, UNKNOWN,};
其中的各个配置参数的配置含义如下:
EXACT_FIT:图片在选定的区域全部可见,图片显示可能会被压缩或者拉伸,不再保持原来的纵横比。
NO_BORDER:图片在特定的区域全部可见,不会扭曲,但可能会被剪裁,维持原来的纵横比。
SHOW_ALL:图片在特定的区域全部可见,不会扭曲,维持原来的纵横比,但可能显示边界。
FIXED_HEIGHT:固定高度,修改内部画布的宽度已适应设备的纵横比。不会扭曲。
FIXED_WIDTH:固定宽度,修改内部画布的高度已适应设备的纵横比。不会扭曲。
好了,我们掌握了所有关于自动适配屏幕的一切知识,下面就可以调用相关的函数设置想要的效果;
如我需要全屏幕的显示:
添加代码如下所示:
auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if(!glview) { glview = GLView::create("My Game"); director->setOpenGLView(glview); } glview->setDesignResolutionSize(480, 320, ResolutionPolicy::NO_BORDER);
最后一行为添加的设置代码,分辨率方案选择NO_BORDER,最后显示效果如下所示:
很好的完成了我们需要的效果。
这个模块知识很小,也没有太大难度,但系统的全面的介绍,网上却没有,是个遗憾,自己研究了下,写出来,希望能够帮助需要的朋友,使用起来也更加的方便。
- cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。
- cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。
- Cocos2d-X3.0 ----- 内存管理源码分析
- Cocos2d-x3.0源码分析之跨平台适配层
- Cocos2d-X3.0 刨根问底(三)----- Director类源码分析
- Cocos2d-X3.0 刨根问底(四)----- 内存管理源码分析
- x3.1.1适配分辨率
- cocos2d-x3.0中bezier曲线的分析
- Cocos2d-x3.0 Node源码学习
- Cocos2d-X3.0 刨根问底(五)----- Node类及显示对象列表源码分析
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
- Cocos2d-X3.0 刨根问底(七)----- 事件机制Event源码分析
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
- Cocos2d-X3.0 刨根问底(四)----- 内存管理源码分析(转)
- Cocos2d-X3.0 刨根问底(五)----- Node类及显示对象列表源码分析
- cocos2d-x3.3 源码分析之-动作Action和ActionManager
- cocos2d-x3.3 源码分析之-动作Animation
- Cocos2d-x3.0中几个RenderCommand子类
- js分页
- java面向对象-Object类-equals()
- 海量数据处理面试题集锦
- awk过滤
- 《C++ Report》杂志文章链接
- cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。
- C++已经开始了
- 海量数据处理之Bloom Filter详解
- Apache反向代理结合Tomcat集群来实现负载均衡(一)、概念理解
- 组合数取模
- awk sort uniq wc -l
- java面向对象-Object类-toString()
- 设计模式02 -工厂方法模式
- java面向对象-内部类的访问规则