欢迎来到天天文库
浏览记录
ID:8808591
大小:417.19 KB
页数:13页
时间:2018-04-08
《cocos2d-x屏幕适配新解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、为了适应移动终端的各种分辨率大小,各种屏幕宽高比,在Cocos2D-X(当前稳定版:2.0.4)中,提供了相应的解决方案,以方便我们在设计游戏时,能够更好的适应不同的环境。 而在设计游戏之初,决定着我们屏幕适配的因素有哪些?简而言之只有两点:屏幕大小和宽高比。这两个因素是如何影响游戏的呢? •屏幕大小:从小分辨率 480×320 到 1280×800 分辨率,再到全高清1080p,从手机到平板,还有苹果设备的 Retina屏,这么多不同的分辨率,而且大小差距甚大,不可能做到一套资源走天下,资源往小了设计,在大屏幕会显示模糊
2、,图片往大了设计,在小屏幕设备又太浪费,而且小屏幕的手机硬件资源也会相对的紧缺,所以根据屏幕大小使用不同的资源是有必要的,而Cocos2D-X也帮我们解决了这一点。 •宽高比:什么是宽高比,就是你的屏幕是方的还是长的,靠近方形的分辨率如480×320,比例为3:2,还有960×540的16:9标准宽屏,这也算是两种总极端情况了,如果能在这两种比例情况做好适配基本就可以了,如果比3:2“更方”如 4:3,比 16:9 “更长”,那么不论如何布局,显示效果差距甚大,最好对固定比例优化吧。当在宽高比在一定范围内,可以通过灵活编写
3、程序去适应,而在显示效果上,Cocos2D-X为我们提供了三种模式,这些模式更多的是帮我们解决比例不一的情况而存在的,如果只是屏幕大小(比例一样),那通过简单的放大缩小即可完成。 三种模式 说是三种模式,其实还有一种“无模式”,也就是Cocos2D-X默认的适配方案,现在我们就来认识一下这些模式,并且通过这些模式去认识其中一些概念 FrameSize、WinSize、VisibleSize、VisibleOrigin,以及它们存在的意义,并且最后灵活运行这些概念 创建出一个不属于这些模式而超越这些模式的新适配解决方案,这是最终
4、目的。 kResolutionUnKnown认识FrameSize 这是 Cocos2D-X 编写的默认模式,没有做任何处理,在这种情况下,游戏画面的大小与比例都是不可控的,在程序运行之初,由各个平台入口函数定义画面大小:1.// proj.linux/main.cpp linux 平台手动指定画面大小 2.CCEGLView* eglView = CCEGLView::sharedOpenGLView(); 3.eglView->setFrameSize(720, 480); 4. 5.// proj.android/jn
5、i/hellocpp/main.cpp android 平台由 jni 调用传入设备分辨率参数 6.void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thiz, jint w, jint h) 7.{ 8. if (!CCDirector::sharedDirector()->getOpenGLView()) 9. { 10. CCEGLView *view = CCEGLView::sharedO
6、penGLView(); 11. view->setFrameSize(w, h); 12. 13. AppDelegate *pAppDelegate = new AppDelegate(); 14. CCApplication::sharedApplication()->run(); 1. } 2. else 3. { 4. // other 5. ... 6. } 7.} 在此我们首先认识了 FrameSize 参数,在游戏运行时,
7、我们可以通过CCEGLView::sharedOpenGLView()->getFrameSize();获得此值。如果在手机上运行,那么不同分辨率将会得到不同的值,既然这个值不可控,那么在写游戏中也就没有参考价值了,比如我们写一个精灵的位置距离底部320高度,在480×320分辨率,能看到其在屏幕上方,如果换一台手机分辨率960×540那么只能显示在中间靠上的位置,如果设置精灵位置为距离屏幕上方(高度)320,反之依然,显示效果不一。 此时可行的方案是使用百分比,如精灵位置在屏幕横向距离左边1/3宽度,在1/2正中间处,而类似
8、这样的设置也不用依赖FrameSize的具体数值。而这样的做法,使得内部元素像弹簧一样,随着FrameSize的大小改变而改变,伸缩或者挤压,对于图片资源大小也是完全不可控,如果根据屏幕大小放大缩小,那我们可以考虑用下面要说的模式,在此不推荐使用 Cocos2D-X 的无模式
此文档下载收益归作者所有