cocos2d-x 屏幕自适配

为什么屏幕适配,暂且不说,先看下目前手机的屏幕分辨率,如下:

480*800     // 比如windows phone以及中高端Android机

480*854     //  WFVGA,是480*800的加长版

540*960     // HTC

640*960         // 经典版的iphone

1136*960           // iphone5

1280*720           // 传说中的HD

1280*800    // 三星的9220

1024*768    // ipad

如果我想让我的游戏在这些设备上运行,因为屏幕的不一致而设定多张不同的资源图片显示是不可取的,所以,屏幕适配是一个很好的方式。

在模拟器中,一般设定屏幕的大小,我们会使用main.cpp中:

CCEGLView* eglView = CCEGLView::sharedOpenGLView();

eglView->setFrameSize(960, 640);     // 设定屏幕大小

然而,在程序中,假如,我有张480*320的图片,屏幕大小设定为960*640,其效果如下:

这样的效果,是不能满足要求的,所以在cocos2d-x的AppDelegate的AppDelegate::applicationDidFinishLaunching()中,我们可以添加如下代码:

CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pEGLView->setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);

针对于setDesignResolutionSize,其,第一个和第二个参数为分辨率的宽高,第三个参数是适配模式,主要有以下几种:

kResolutionExactFit,        // 拉伸变形,使其铺满屏幕
kResolutionNoBorder,      // 按比例放缩,全屏展示不留黑边(长宽中小的铺满屏幕,大的超出屏幕)
kResolutionShowAll,        // 按比例放缩,全部展示不裁剪(长宽中大的铺满屏幕,小的留有黑边)
kResolutionFixedHeight,   // 按比例放缩,宽度铺满屏幕
kResolutionFixedWidth,    // 按比例放缩,高度铺满屏幕

一般情况下,获取分辨率的宽高,我们会使用

CCDirector::sharedDirector()->getWinSize()获取分辨率的宽高

屏幕适配的原理,说通俗点讲就是获取屏幕宽高比率和背景图片宽高比率相对比的,所以我采取的方式是这样的:

// 屏幕适配(原理:根据屏幕比率和背景图片比率比较的大小)
    ResolutionPolicy eResolutionType = kResolutionUnKnown;   // 适配模式
    CCSize winSize = CCSizeMake(480, 320);
    float designRate = winSize.width / winSize.height;               // 参照比率

float WinWidth = CCDirector::sharedDirector()->getWinSize().width;

float WinHeight = CCDirector::sharedDirector()->getWinSize().height;
    float WinRate = WinWidth / WinHeight;                // 屏幕比率

if (WinRate > designRate)
        eResolutionType = kResolutionFixedWidth;
    else if(WinRate < designRate)
        eResolutionType = kResolutionFixedHeight;
    else if(WinRate == designRate)
        eResolutionType = kResolutionNoBorder;
    pEGLView->setDesignResolutionSize(winSize.width, winSize.height, eResolutionType);

最后运行效果:

参考:http://blog.csdn.net/chinahaerbin/article/details/39586281

参考:http://my.oschina.net/ffs/blog/305680?fromerr=vvswf7WK

时间: 2024-10-19 18:17:23

cocos2d-x 屏幕自适配的相关文章

移动端屏幕的适配

因为对H5较感兴趣,所以没事的时候会看一些文章博客. 废话不多说,先引入问题, 关于移动端屏幕的适配你有没有什么想说的 ?首先 我之前一直使用的就是这种Rem 缩放的方法去做的,content= "width= device-width",initial-scale=1.0,可以实现针对不同屏幕实现缩放效果,并且不出现滚动条, 而在内容部分使用 Rem进行对等比缩放,我们知道Rem 是一个相对长度 单位,它的大小会根据HTML根元素设置的font-size的大小进行换算, 根元素(ht

腾讯的手机屏幕的适配代码

腾讯的适配代码 ,比较权威 ,果断盗用! <script type="text/javascript"> if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test

Android屏幕大小适配问题解决

? 一.一些基本概念 1.长度(真实长度):英寸.inch 2.分辨率:density 每英寸像素数  dpi(密度) 3.像素:px 4.dip的公式:px /dip=dpi/160  所以 dip 类似于英寸.长度(dp=dip,sp类似于dip)  dip=160*inch dip= 160/dpi * px 当dip一定时,dpi 越大,px就越大 5.广义分辨率=长px*宽px 二.经常使用规律 1.平时我们说 手机的分辨率是 320*480的,事实上的这里的分辨率是相对分辨率 意思是

第九章 多语言环境的支持和多屏幕的适配(2)

9.3多屏幕的适配 9.3.1屏幕参数的基本概念 Android手机屏幕大小不一,有480x320.640x360.800x480等等,还包括不同屏幕密度,怎样才能让应用程序自动适应不同的屏幕呢? 首先我们来了解几个基本概念: 1)屏幕尺寸Screensize 即显示屏幕的实际大小,按照屏幕的对角线进行测量. 为简单起见,Android把所有的屏幕大小分为四种尺寸:小.普通.大.超大(分别对应:small.normal.large.extralarge). 应用程序可以为这四种尺寸分别提供不同的

第九章 多语言环境的支持和多屏幕的适配(1)

第九章 多语言环境的支持和多屏幕的适配 资源是在代码中使用到的,并且在编译时被打包进应用程序的附加文件.出于加载效率的考虑,资源被从代码中分离出来,而且XML文件被编译进二进制代码中.在Android中,程序代码可以不直接和资源发生关系,而是通过R文件提供的索引来间接的引用某一个资源.Android系统会自动根据用户当前的环境,和屏幕分辨率情况,自动选用最合适的资源.正是基于Android系统这种独特的处理方式,开发者可以编写多套资源文件,从而很方便的实现多语言环境的支持和多种屏幕的适配. 本章

Cocos2d适应屏幕分辨率

我使用的版本是cocos2d-2.0-x-2.0.4,cocos2dx-2.0版本对多分辨率适配提供了很好的支持,使用起来比1.0版本要简单些,1.0版本的适配可以参考这篇博文. 1. 做2.0版本的适配首先需要了解下面这些知识. (1)适配策略 2.0版本提供了三种适配策略: kResolutionNoBorder:超出屏幕的部分会被裁剪,两侧没有黑边,铺满屏幕,按图片原始比例显示,图片不变形. kResolutionShowAll:整个游戏界面是可见的,会按原始比例进行缩放,图片不变形,但两

【IOS 开发】IOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

一. IOS 项目简介 1. IOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类和资源; (1) HelloWorld 目录 HelloWorld 目录介绍 : -- 命名规则 : 该目录名称与 IOS 项目名称相同, 是主目录; -- 存放内容 : IOS 项目的 源码文件, 界面设计文件, 资源文件都存放在该目录下; -- 源文件 : Objective C 的 .m 和

Android 屏幕旋转适配全解析

原创文章,转载请注明 ( 来自:http://blog.csdn.net/leejizhou/article/details/51233342 李济洲的博客 ) 这篇博文给大家介绍下,当手机屏幕旋转时我们应当怎么去处理,首先了解下默认情况下Android进行屏幕旋转的原理,当手机进行旋转时重力感应sensor起到作用,会将Activity销毁并按照横屏的屏幕尺寸进行重新构造,生命周期如下图所示,一句话总结就是默认情况下Activity进行屏幕旋转会自动进行onDestroy并重新onCreate

iOS APP屏幕尺寸适配

初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone 3GS也保持不变. 那时编写iOS的App(应用程序),只支持绝对定位.比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是40像素,高度是50像素,放在(20, 20)像素的位置. iPhone 4 2010年,iPhone 4发布,率先采用Retina显示屏,在屏幕的物理尺寸不变的