Cocos2dx进阶学习之屏幕适配

Cocos2dx进阶学习之屏幕适配,第1张

概述http://cocos2d.9tech.cn/news/2014/0307/39995.html 背景 在学习cocos2dx时,我们在main函数中发现一句代码, 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 37 38 39 40 41 #i

http://cocos2d.9tech.cn/news/2014/0307/39995.HTML


背景

在学习cocos2dx时,我们在main函数中发现一句代码,

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 37 38 39 40 41 #include "main.h" #include "AppDelegate.h" #include "CCEGLVIEw.h" USING_NS_CC; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdline, int nCmdshow) { UNREFERENCED_ParaMETER(hPrevInstance); UNREFERENCED_ParaMETER(lpCmdline); // create the application instance AppDelegate app; CCEGLVIEw* eglVIEw = CCEGLVIEw::sharedOpenGLVIEw(); eglVIEw->setVIEwname( "CrazyMario" ); eglVIEw->setFrameSize(480,320); return CCApplication::sharedApplication()->run(); }

那就是eglVIEw->setFrameSize(480,320),这句代码设置了窗口的大小,一般说来手机游戏需要全屏显示,所以对于不同分辨率的手机,setFrameSize要求不一样的。这样是不是很崩溃?因为我们代码里很多地方可能也要改,图片大小可能也要改,那怎么办呢?

其实cocos2dx已经为我们做好了这一切

结局方案

这个方案就是调用eglVIEw->setDesignResolutionSize(480,320,kResolutionShowAll);来告诉cocos2dx,我的程序是按照480,320来设计的,那么setFrameSize如果不是480,320那么cocos2dx会按照比例给我们做适配,不用我们做别的事情。

在超级马里奥这个游戏里,在AppDelegate中已经调用了setDesignResolutionSize函数设置设计大小为480,320

@H_502_258@

那么在setFrameSize不同的情况下,也不会引起图片比例不合适的情况,只是窗口大小会发生变化而已

在480*320的情况下

@H_502_258@

在960*640的情况下,只是界面变大了,图片没有任何的不适合

@H_502_258@

setDesignResolutionSize的参数

第三个参数的取值范围如下:

24
enum ResolutionPolicy { // The entire application is visible in the specifIEd area without trying to preserve the original aspect ratio. // distortion can occur,and the application may appear @R_679_4041@ or compressed. kResolutionExactFit, @H_213_301@// The entire application fills the specifIEd area,without distortion but possibly with some cropPing, // while maintaining the original aspect ratio of the application. kResolutionNoborder, // The entire application is visible in the specifIEd area without distortion while maintaining the original // aspect ratio of the application. borders can appear on two sIDes of the application. kResolutionShowAll, // The application takes the height of the design resolution size and modifIEs the wIDth of the internal // canvas so that it fits the aspect ratio of the device // no distortion will occur however you must make sure your application works on different // aspect ratios kResolutionFixedHeight, // The application takes the wIDth of the design resolution size and modifIEs the height of the internal // canvas so that it fits the aspect ratio of the device // no distortion will occur however you must make sure your application works on different // aspect ratios kResolutionFixeDWIDth, kResolutionUnKNown, };

kResolutionExactFit:会靠拉伸来填满屏幕,本例来说背景图会变形来填充屏幕,因为1024:768=1.3, 480:320=1.5,宽高比不同,图片也就无法等比缩放来填满屏幕,只能变形了。

kResolutionNoborder: 看不到黑边,实际就是宽高等比缩放,但缩放比例取宽比和高比之中大的那一个。

kResolutionShowAll:全部显示,可以理解为保证内容都显示在屏幕之内,实际也是宽高等比缩放,但缩放比例取宽比和高比之中小的那一个。

总结

以上是内存溢出为你收集整理的Cocos2dx进阶学习之屏幕适配全部内容,希望文章能够帮你解决Cocos2dx进阶学习之屏幕适配所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1056220.html

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

发表评论

登录后才能评论

评论列表(0条)

保存