在进行游戏开发时, 由于市场上的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. Windows平台下Git服务器搭建

    第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...

  2. ORA-06552: PL/SQL: Compilation unit analysis terminated ORA-06553: PLS-553: character set name is not recognized

    首先,确认字符集是否修改的不彻底.SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,DECODE(TYPE#, 1, DECODE( ...

  3. Android Fragment (二) 实例1

    千呼万唤始出来,今天就也写一篇Frament 的简单实例.先看效果: 一看这效果,首先我们的配置资源文件:new -->android xml -->selector --> 四个图 ...

  4. 用Python获取沪深两市上市公司股票信息,提取创近10天股价新高的、停牌的、复牌不超过一天或者新发行的股票,并存入mysql数据库

    #该脚本可以提取沪深两市上市公司股票信息,并按以下信息分类:(1)当天股价创近10个交易日新高的股票:(2)停牌的股票:(3)复牌不超过一个交易日或者新发行的股票 #将分类后的股票及其信息(股价新高. ...

  5. cocos2d-x 3.2 创建新项目问题

    cocos2d-x 3.2 执行cocos2d-x\tools\cocos2d-console\console下的cocos2d.py,输入相应的参数即可创建一个新的项目,具体参数网上介绍一大堆,就不 ...

  6. iOS学习之设计模式

    iOS开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~ (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现. 优势:解耦合 敏捷 ...

  7. position属性的四个value

    As we all know, position属性有四个值,分别为 relative,fixed,absolute, static. 1,relative相对定位 (不会脱离文档流) 在一个相对定位 ...

  8. jenkins配置

    自动化测试机器172,27.14.22   IP 一.jenkins要先登录——>点击JCF_Automation——>点击左边配置 二.环境变量赋值就不会把进程杀掉

  9. Oracle对列的操作总结

    1.更改列名 alter table TABLE_NAME rename column COLUMN_OLD COLUMN_NEW; 2.添加列 alter table TABLE_NAME add ...

  10. C++ Daily 《6》---- 类静态对象与函数静态对象

    C++ 的一个哲学基础是,你不应该为你使用的东西付出代价. class 拥有一个 static 成员,即使从未被用到,它也会被构造和析构: 而 函数拥有一个 static 成员, 如果这个函数从未被调 ...