最近遇到多分辨率支持问题,所以查了一些资料。将一些收获共享一下,以便自己和其他需要的朋友日后参考。

如果我要建立一个cocos2d-x项目,我的目标是支持iphone3G( 480, 320 ),iphone4/4s( 960, 640 ), iphone5( 1136, 640 ),ipad1/2( 1024, 768 ),ipad 3( 2048, 1536 ),以及所有android设备(其分辨率可能是( 800, 480 )等其它各种分辨率)?我该如何规划呢?但在你规划之前是否清楚cocos2d-x是如何为多分辨率支持进行设计的?

所以首先来看一下,cocos2d-x提供的基本支持。

  1. Cocos2d-x自从2.0.2版本起,不在采用-hd,-ipd,-ipdhd等文件名称后缀了,因为其目标是支持是跨平台,不再是单单IOS系统了。改用CCFileUti类中的setResourceDirectory()(2.0.4版本)或者setSearchPaths()(2.1.1版本)。我们只需在resource目录下为每个系统建立自己的目录,并将对应资源放进去(具体参考http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Mechanism_of_loading_resources)。
  2. Cocos2d-x自从2.0.4版本起,去除了setRetinaEnable()函数,因为cocos2d-x将默认开启retina(如果设备支持的话),并带来了全新的概念。你需要理解designSize和contentScaleFactor,以及designSize将如何映射到窗口上。我简单解释一下:

    1.designSize:从字面意思就是设计大小。“设计”两字为何意?好比我们抛开不同设备分辨率,就假定只有一个标准界面,让标准界面隐藏背后不同设备的差异。这个标准界面就是designSize。Cocos2d-x也将向标准界面“看齐”,   一旦我们设置了designSize,cocos2d-x中的getWinSize就成了我们的designSize。我们一般设置其为(480,320)“经典”大小,但假如你的初始资源是(1024,768)大小的,那么我们可以使用(512,384)的设计界面,保证资源的宽高比和设计宽高比相同,能保证资源全屏。

    2.contentScaleFactor:从字面意思内容缩放因子,内容即我们的资源(我是这么理解的)。一般contentScaleFactor = resourceHeight / designSize.Height;为什么要有这个东西?因为刚才我们说了designSize,我们将其设置为(480,320),而且以后我们的winSize就成了designSize,但是我们用在iphone4中背景图片还是(960,640)的,此时我们的图片是屏幕4倍大,就显示不开了。有了缩放因子,我们就能将背景图片(960,640)的编程(480,320)。这样原本全屏的资源,现在仍然是全屏的。

    3.designSize如何映射到“真实窗口”上的:这个过程就是将我们的”标准界面“映射到真实的设备上。我们真实设备的大小可能有很多变化。(480,320)的设计界面如何映射到,假如说(1136,640)的呢?有三种kResourceExactFit,kResourceNoBorder,kResourceShowAll。

    第一种是完全适应,即不论你真是设备分辨率多么”怪异“,它都将设计界面恰好的贴上去。看似”完美“的方案,但也存在瑕疵,那就是变形。你的人物可能”变
    胖“,或者”拉瘦“。

    第二种是没边界,即没有边界限制,假如你的”设计界面“是(480,320),目标设备是(1136,640)。如果目标设备的长宽比率和设计界面的长宽比率不一
    样,那么这个模式采用超出目标设备边界的拉伸方式,也就是设计界面有一边完全适应,另一边超出的方式。在我们当前假设的这种情况,那就是会将设计界
    面的宽拉伸到1136.然后高等比放大。这样的话,我们会发现,宽正好”全屏“,但是高超出去。这也就是所谓了没有边界限制的”好处“。

    第三种是全显示,即全部显示,假如你的”设计界面“是(480,320),目标设备是(1136,640)。那么这种模式会保证你的设计界面一定能全部显示。也就
    是说,如果目标设备的长宽比率和设计界面的长宽比率不一样,那么这个模式采用限制到目标设备边界的拉伸方式。在我们当前假设的这种情况,那就是会将
    设计界面的高拉伸到640.然后宽等比放大。这样的话,我们会发现,高正好”全屏“,但是宽被”挤“了(在两边留有黑边)。这也就是所谓了全部显示的”好处“。

    (具体参考http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Multi_resolution_support

  3. 另外cocos2d-x有个“诡异”的特点(至少在cocos2d-x 2.1.1版本),那就是当你开启【iphone Retina 4-inch】的时候,如果你没有设置启动封面,那么winSize仍将是(960,640)。所以必须设置启动封面,才能得到winSize(1136,640)。

知道cocos2d-x对过分辨率的支持后,我们就更加能理解好自己项目要怎样才能支持多分辨率。如果你用到CocosBuilder(如果你还不会使用,就请参考本人的【CocosBuilder教程系列】),那么如何让CocosBuilder也支持多分辨率呢?

  1. 因为CocosBuilder的文件读取库(即CCBReader读取ccbi文件),也是使用CCTexture来加载的,所以我们前面讲到的目录搜索规则也会自动被使用到ccbi的文件加载中去。虽然CocosBuilder有跟Cocos2d一样的的承诺“-hd,-ipd,-ipdhd",但这些在cocos2d-x作用已经失效。
  2. 由于我们面向多分辨率,所以我们一定在CocosBuilder中使用百分比模式来设置坐标和大小。否则,你设定的坐标就不会自动适应对应的设备分辨率。例如:你设置一个登陆框,你不应该将其坐标设置为(512,384),因为这个坐标在(480,320)的iphone3G或者android设备,可能直接看不到,而且和其他元素之间的相对距离也就混乱不堪。所以使用百分比(50%,50%),能保证在任何设备上都是居中的。
通过上面讲述,你应该能找到自己的多分辨率支持解决方案。一套资源也好,两套,三套都可以,主要还是看每个游戏自己的需求。

Cocos2d-x 多分辨率支持的更多相关文章

  1. Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持

    Working with Multiple Resolutions 多分辨率设置 A common scenario when creating apps or games is to target ...

  2. cocos进阶教程(2)多分辨率支持策略和原理

    cocos2d-x3.0API常用接口 Director::getInstance()->getOpenGLView()->setDesignResolutionSize() //设计分辨 ...

  3. 《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

    <Cocos2d-x实战 C++卷>上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节. · 各大商店 ...

  4. cocos2d-x多分辨率和随后的自适应CCListView的bug修复

    cocos2d-x多分辨率自适配及因此导致的CCListView的bug修复 cocos2d-x是一款众所周知的跨平台的游戏开发引擎.因为其跨平台的特性.多分辨率支持也自然就有其需求. 因此.在某一次 ...

  5. 介绍一些实用的IOS手势识别库 (COCOS2D)

    http://www.supersuraccoon-cocos2d.com/zh/2012/11/14/introduction-to-some-great-ios-gesture-recogniti ...

  6. Cocos2d-x 多分辨率适配完全解析

    从Cocos2d-x 2.0.4开始,Cocos2d-x提出了自己的多分辨率支持方案,废弃了之前的retina相关设置接口,提出了design resolution概念. 有以下相关接口: CCEGL ...

  7. (16)Cocos2d-x 多分辨率适配完全解析

    Overview 从Cocos2d-x 2.0.4开始,Cocos2d-x提出了自己的多分辨率支持方案,废弃了之前的retina相关设置接口,提出了design resolution概念. 3.0中有 ...

  8. cocos2d安装

    cocos2d引擎要求Python 2 为2.6 以上版本,Python 3 为3.3以上版本 cocos2d引擎安装支持pip安装,安装指令如下: pip install cocos2d

  9. 另一个维度:cocos-2d VS vue

    最近再看cocos-2d的东西,期间得到了同事和老板的支持,在此感谢.之前一直在做vue网页,现在看游戏cocos-2d这块,刚接触肯定有点不适应.cocos-2d多了很多感念:导演.场景.节点等.这 ...

随机推荐

  1. UML学习小结

    最近在使用状态模式写一个仿Windows计算器的MFC程序,顺便学习了一下UML图的绘制,尤其是类图和状态图的绘制,这里做一下总结吧.    一.UML简介 统一建模语言UML(Unified Mod ...

  2. iOS 程序间跳转传参(支付和地图)

    两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个AP ...

  3. EXCEL读写NPOI--导出功能

    第一步:将NPOI中的一下三个文件复制到项目中

  4. PAT (Advanced Level) 1003. Emergency (25)

    最短路+dfs 先找出可能在最短路上的边,这些边会构成一个DAG,然后在这个DAG上dfs一次就可以得到两个答案了. 也可以对DAG进行拓扑排序,然后DP求解. #include<iostrea ...

  5. CodeForces 614D Skills

    排序+枚举+二分 最大的那些变成A,小的那部分提高最小值 #include<cstdio> #include<cstring> #include<cmath> #i ...

  6. 将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

    - (NSArray *)testa:(NSDictionary *)dic { NSMutableArray *arr_M = [NSMutableArray array]; // 1.遍历每一个元 ...

  7. PHP 反射应用之一(插件框架)

    http://www.zui88.com/blog/view-205.html 反射,非常有用的一套东西,用来在运行时,分析代码,分析类的属性,方法,参数,实例化类,调用类的方法等等,从而实现框架,实 ...

  8. Redis详细介绍

    转自:http://blog.csdn.net/eroswang/article/details/7080412 1.介绍 1.1 Redis是什么 REmote DIctionary Server( ...

  9. JRPC 轻量级RPC框架

    JRPC是一个轻量级的java RPC框架.它支持服务注册和发现. 目前它开源了,地址为:https://github.com/dinstone/jrpc. Quick Start step 1: g ...

  10. HTML 学习笔记 JQuery(表单,表格 操作)

    表单应用 一个表单有3个基本组成部分 (1)表单标签:包含处理表单数据所用的服务器端程序URL 以及数据提交到服务器的方法 (2)表单域:包含文本框 密码框 隐藏框 多行文本框 复选框 单选框 下拉选 ...