cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。

cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。,第1张

概述http://www.2cto.com/kf/201407/321086.html 和以前的版本不太一样,每当我们打开cocos2d-x3.0的新建工程时,都会看到其中加载的图片比较小,只占据了大概四分之一的空间,如下图所示: 视觉效果不太好,我就喜欢把它调整为全屏幕显示,且能够自动适应与各种不同的分辨率下,于是就找着了相关的代码,发现和以前的版本设置还是有一定的区别。不过核心内容没有变化。由于网

http://www.2cto.com/kf/201407/321086.HTML


和以前的版本不太一样,每当我们打开cocos2d-x3.0的新建工程时,都会看到其中加载的图片比较小,只占据了大概四分之一的空间,如下图所示:


视觉效果不太好,我就喜欢把它调整为全屏幕显示,且能够自动适应与各种不同的分辨率下,于是就找着了相关的代码,发现和以前的版本设置还是有一定的区别。不过核心内容没有变化。由于网上没有新版本的资料,相关的个别信息也很很系统和完整,自己研究了搞清楚了还是决定写出来归纳下。

可以在AppDelegate::applicationDIDFinishLaunching()的方法中先获取导演类的单例,然后通过导演类的单例获取glvIEw对象,即为openglvIEw对象,如果不存在(glvIEw为空),就重新创建一个,如下代码所示<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" >vcD4KPHA+PC9wPgo8cD4gYXV0byBkaXJlY3RvciA9CkRpcmVjdG9yOjpnZXRJbnN0YW5jZSgpOzwvcD4KPHA+ICAgCmF1dG8gZ2x2aWV3ID0gZGlyZWN0b3ItPmdldE9wZW5HTFZpZXcoKTs8L3A+CjxwPiAgIAppZighZ2x2aWV3KSB7PC9wPgo8cD4gICAgICAgIGdsdmlldyA9CkdMVmlldzo6Y3JlYXRlKA=="My Game");

director->setopenGLVIEw(glvIEw);

}


在setopenGLVIEw(glvIEw)函数对进行了设置_openGLVIEw,其中包括很多配置信息,含有取得我们设置屏幕大小适配相关的函数_winSizeInPoints = _openGLVIEw->getDesignResolutionSize(),在里面取出来了我们可以设置的分辨率配置信息。

代码如下所示:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 voID Director::setopenGLVIEw(GLVIEw *openGLVIEw) { CCASSERT(openGLVIEw, "opengl vIEw should not be null" ); if (_openGLVIEw != openGLVIEw) { // Configuration. Gather GPU info Configuration *conf = Configuration::getInstance(); conf->gatherGPUInfo(); cclOG( "%s\n" ,conf->getInfo().c_str()); (_openGLVIEw) _openGLVIEw->release(); _openGLVIEw = openGLVIEw; _openGLVIEw->retain(); // set size _winSizeInPoints = _openGLVIEw->getDesignResolutionSize(); createStatsLabel(); (_openGLVIEw) { setGLDefaultValues(); } _renderer->initGLVIEw(); CHECK_GL_ERROR_DEBUG(); (_eventdispatcher) { _eventdispatcher->setEnabled( true ); } } }


下面是取出配置方案的函数代码,

4 const Size& GLVIEwProtocol::getDesignResolutionSize() const return _designResolutionSize; 其中的_designResolutionSize是通过GLVIEwProtocol::setDesignResolutionSize()函数设置的,而这个函数是设置自动适配分辨率大小的关键函数,代码如下所示:

?

14
GLVIEwProtocol::setDesignResolutionSize( float wIDth, height,ResolutionPolicy resolutionPolicy) CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNowN,monospace!important; Font-size:1em!important; min-height:auto!important; color:blue!important; background:none!important">"should set resolutionPolicy" ); (wIDth == 0 .0f || height == .0f) ; } _designResolutionSize.setSize(wIDth,height); _resolutionPolicy = resolutionPolicy; updateDesignResolutionSize(); 其中包括宽高和重要的适配策略ResolutionPolicy,作为一个枚举类型,包括了如下方案:

15

enum class ResolutionPolicy { EXACT_FIT, NO_border, SHOW_ALL, FIXED_HEIGHT, FIXED_WIDTH, UNKNowN, };

其中的各个配置参数的配置含义如下:

EXACT_FIT:图片在选定的区域全部可见,图片显示可能会被压缩或者拉伸,不再保持原来的纵横比。

NO_border:图片在特定的区域全部可见,不会扭曲,但可能会被剪裁,维持原来的纵横比。

SHOW_ALL:图片在特定的区域全部可见,不会扭曲,维持原来的纵横比,但可能显示边界。

FIXED_HEIGHT:固定高度,修改内部画布的宽度已适应设备的纵横比。不会扭曲。

FIXED_WIDTH:固定宽度,修改内部画布的高度已适应设备的纵横比。不会扭曲。

好了,我们掌握了所有关于自动适配屏幕的一切知识,下面就可以调用相关的函数设置想要的效果;

如我需要全屏幕的显示:

添加代码如下所示:

?

8
auto director = Director::getInstance(); auto glvIEw = director->getopenGLVIEw(); (!glvIEw) { glvIEw = GLVIEw::create( "My Game" ); director->setopenGLVIEw(glvIEw); } glvIEw->setDesignResolutionSize( 480 320 最后一行为添加的设置代码,分辨率方案选择NO_border,最后显示效果如下所示:

<img src="http://www.2cto.com/uploadfile/Collfiles/20140728/2014072809104863.png" alt="n块ズ楗�…�" http:="" www.2cto.com="" os="" "="" target="_blank" >系统的全面的介绍,网上却没有,是个遗憾,自己研究了下,写出来,希望能够帮助需要的朋友,使用起来也更加的方便。

总结

以上是内存溢出为你收集整理的cocos2d-x3.0中图片分辨率自动适配设置以及源码原理分析。全部内容,希望文章能够帮你解决cocos2d-x3.0中图片分辨率自动适配设置以及源码,原理分析。所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)