在进行游戏开发时, 由于市场上的Android移动设备的分辨率有很多种,而且IOS移动设备的分辨率也不相同,为了能让手游能在90%以上的移动设备较为完美的运行,因此需要考虑屏幕的自适应问题,让一套资源能在多种分辨率下的移动设备上运行起来。

在AppDelegate.cpp文件中,一般都是这样处理屏幕自适应问题的:

bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLViewImpl::create("Treasure Defense"/*, cocos2d::Rect(0, 0, 1024, 768)*/);
director->setOpenGLView(glview);
} glview->setDesignResolutionSize(1024, 768, ResolutionPolicy::EXACT_FIT); // 这里设置屏幕自适应 // ....其他内容 }

1024和768分别是游戏运行的窗口的宽高,第三个参数ResolutionPolicy::EXACT_FIT是设置屏幕自适应的一种方法,其他方法在头文件 CCGLView.h中:

// CCGLView.h

enum class 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 stretched or compressed.
// EXACT_FIT会将背景连带里面的Sprite等等都会拉伸或压缩, 不会考虑原有的宽高比. 会发生变形, 因此游戏界面会被拉伸或压缩, 不会出现黑边
EXACT_FIT, // The entire application fills the specified area, without distortion but possibly with some cropping,
// while maintaining the original aspect ratio of the application.
// NO_BORDER会保持宽高比, 不会出现黑边, 因此如果屏幕的分辨率小于背景图片, 会将背景图片进行裁剪。
NO_BORDER, // 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.
// 会保持宽高比,等比例拉伸, 直到宽度或高度达到屏幕尺寸, 但是两侧可能会出现黑边
SHOW_ALL, // 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
// 保持高度不变, 然后修改宽度值来适配屏幕,不变形,与设备保持宽高比
FIXED_HEIGHT, // 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
// 保持宽度不变, 然后修改高度值来适配屏幕,不变形,与设备保持宽高比
FIXED_WIDTH, UNKNOWN,
};

各个参数说明:

ResolutionPolicy::EXACT_FIT 

EXACT_FIT将图片拉伸,不会保持原有的宽高比,在拉伸时会连带里面的Sprite、Button等都会拉伸或压缩, 会发生变形, 因此游戏界面会被拉伸或压缩, 但不会出现黑边。 它适用于个人的小项目, 轻微拉伸不会太影响游戏的展示,但公司大项目基本不用这个。

ResolutionPolicy::NO_BORDER

NO_BORDER为了保持图片的宽高比, 等比例拉伸,屏幕宽、高分别与设计分辨率宽、高计算缩放因子,取较大者作为宽、高的缩放因子,保证了设计区域总能一个方向上铺满屏幕,而另一个方向可能会超出屏幕区域, 不会出现黑边情况。如果屏幕分辨率和图片分辨率不同,会将图片裁剪多出的部分。

ResolutionPolicy::SHOW_ALL

屏幕宽、高分别与设计分辨率宽、高计算缩放因子,取较小者作为宽、高的缩放因子。 保证了全部可以显示到屏幕上,但可能会有黑边。

ResolutionPolicy::FIXED_HEIGHT 和 ResolutionPolicy::FIXED_WIDTH

保持高度或宽度不变,ResolutionPolicy::FIXED_HEIGHT适合高方向需要填充满,宽方向可以裁剪的游戏界面; ResolutionPolicy::FIXED_WIDTH适合宽方向需要填充满, 高方向可以裁剪的游戏界面。 它们是NO_BORDER的特殊情况,即可以在特定方向来拉伸。

重点推荐ResolutionPolicy::FIXED_HEIGHT和ResolutionPolicy::FIXED_WIDTH, 次之是NO_BORDER, 除非特殊需要,若一定要全部显示填充屏幕则可以使用EXACT_CIT,若一定要全部无变形显示, 则可以使用SHOW_ALL。

关于cocos2d-x 3.x 的屏幕适配问题的帖子 :

http://www.2cto.com/kf/201409/333604.html

【Cocos2d-x 3.x】屏幕自适应匹配的更多相关文章

  1. [cocos2d-x]屏幕自适应解决的方法

    近期在写一个项目,要求pc,ipad,andriod平台上都能够执行,所以选择用cocos2d-x来开发. 我们的资源大小是1024*768的,在pc上和苹果上都是没有问题的,但是到了andriod上 ...

  2. [Unity3D]NGUI用Sprite动画和屏幕自适应做游戏开始场景

    我们在玩任何一款手游产品时,都是先上来个logo界面,游戏欢迎界面等,这就意味着我们要做一款游戏需要多个场景,场景之间来回切换实现游戏逻辑,unity也不例外,所以从本篇开始将会介绍如何搭建多个场景, ...

  3. 4种必须知道的Android屏幕自适应解决方案

    文章来源:http://blog.csdn.net/shimiso/article/details/19166167 demo下载:http://www.eoeandroid.com/forum.ph ...

  4. NGUI屏幕自适应

    NGUI确实是非常棒的一个做界面的插件,比起U3D自带的GUI要好很多,当然也有一些不好之处,毕竟什么都不可能那么完美. 最近在用Unity写游戏使用NGUI遇到了一个很多人都在遇到的问题,就是关于屏 ...

  5. 浅谈压缩感知(二十七):压缩感知重构算法之稀疏度自适应匹配追踪(SAMP)

    主要内容: SAMP的算法流程 SAMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.SAMP的算法流程 前面所述大部分OMP及其前改算法都需要已知信号的稀疏度 ...

  6. .Net语言 APP开发平台——Smobiler学习日志:开发APP时,如何快速地实现屏幕自适应

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.属性介绍 设置控件在客户端屏幕可见并超出客户端屏幕时,是否自动调节高度以适应屏幕高 ...

  7. 【Unity3D插件】NGUI屏幕自适应(转)

    屏幕自适应 NGUI可以比较方便的实现屏幕自适应,但是它的官方教程里面针对这个问题没有详细的教程,所以可能在实现的时候会走比较多的弯路.以下是我在开发过程中找到的一个比较方便的实现方法. 主要组件 1 ...

  8. 【NGUI】屏幕自适应(不用UIStretch,用UIRoot)---------------good

    原地址:http://blog.csdn.net/lzhq1982/article/details/18814023 这篇文章是转载的,之前用UIStretch做屏幕自适应,但一直有两个硬伤让我难受, ...

  9. NGUI学习笔记(三):屏幕自适应

    我们开发移动端游戏的时候,一般都会选择Constrained/FixedSize的缩放模式来保证图片在不同的分辨率下相对于屏幕的尺寸保持一致,但是对于屏幕自适应来说,这还是不够的,不同的手机存在不同的 ...

随机推荐

  1. Devexpress Winform Gridcontrol 中根据条件单元格的值改变单元格的颜色等属性。

    提供一下三种方法 1.使用设计器 点击gridcontrol控件,run designer,format Condtions, add,然后进行各种条件的设置. 2.用代码代替设计器. 实例代码: p ...

  2. Beagleboard xm sd卡恢复

    来源于:http://circuitco.com/support/index.php?title=BeagleBoard-xM windows下恢复更加简单,推荐windows系统下恢复. To in ...

  3. margin:0 auto 与 text-align:center

    1.text-align:通过指定行框与哪个点对齐,从而设置块级元素内文本的水平对齐方式;            text-align:center 设置文本或img标签等一些内联对象的居中. 2.m ...

  4. laravel in centos

    如果遇到: phpunit.... To enable extensions, verify that they are enabled in those .ini files: - /etc/php ...

  5. iOS 3D Touch 适配开发

    3D Touch的主要应用 文档给出的应用介绍主要有两块: 1.A user can now press your Home screen icon to immediately access fun ...

  6. 触发Full GC执行的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...

  7. 堆排序C++实现

    /* * heapsort.cpp * * Created on: 2016年3月30日 * Author: Lv_Lang */ //堆排序 #include <iostream> us ...

  8. Android深度探索--HAL与驱动开发----第八章读书笔记

    通过蜂鸣器的实现原理,实现一个完整的蜂呜器驱动,可以打开和关闭蜂鸣器. PWM驱动的实现方式不同于LED驱动, PWM 驱动将由多个文件组成.这也是大多数 Linux 驱动的标准实现方式. 刚开始是L ...

  9. 在web中使用windows控件,实现摄像头功能

    最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,A ...

  10. jQuery 的三种获取值的方式

    本节内容主要介绍的是如何使用jQuery中的.html(),.text()和.val()三种方法,用于读取,修改元素的html结构,元素的文本内容,以及表单元素的value值的方法.jQuery中为我 ...