Cocos2d-x的分辨率可以分为两种:屏幕分辨率和设计分辨率。

屏幕分辨率就是屏幕窗口的大小,单位是像素。

设计分辨率单位是点,一个点可能包括多个像素。

如果把一台显示器自身的分辨率比作屏幕分辨率的话,我们在操作系统里设置的分辨率就是设计分辨率。

理想状态下,设计分辨率的点就是屏幕分辨率的像素,两种分辨率相等,此时成像效果最清晰。

对一个Cocos2d-x项目,我们在创建GLView时,可以设置屏幕分辨率,也可称为屏幕大小:

glview = GLViewImpl::createWithRect("Title",Rect(0,0,1000,400));

接下来设置设计分辨率:

glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::FIXED_HEIGHT);

3个参数:设计分辨率的宽,设计分辨率的高,分辨率的适配策略。

适配策略有5种:

SHOW_ALL:按比例系数缩放,屏幕显示所有内容,不拉伸,屏幕可能有黑边。

NO_BORDER:按比例系数缩放,部分内容可能在屏幕外,不拉伸,没黑边。

EXACT_FIT:设计分辨率直接放大到屏幕分辨率,屏幕显示所有内容,拉伸,没黑边。

FIXED_HEIGHT:自动适配,高固定。

FIXED_WIDTH:自动适配,宽固定。

比例系数scaleX和scaleY是屏幕分辨率与设计分辨率的商。

在适配策略NO_BORDER和SHOW_ALL中,最终的缩放比例分别为scaleX和scaleY两者中最大和最小。而策略EXACT_FIT直接将scaleX和scaleY作为宽和高的缩放系数,即直接拉伸。

比例系数与设计分辨率的乘积是适配策略处理后的Size。

图片是根据设计分辨率进行展示。

开发过程中,我们只能设置设计分辨率,而实际的屏幕分辨率因为设备屏幕大小的不同而不同。在不同的设备中,引擎会把设计分辨率适配到屏幕上。

但是屏幕宽高比和设计分辨率的宽高比很可能差别大,直接放缩或拉伸的效果不理想。我们需要一种能根据屏幕宽高比自动调整设计分辨率宽高比的适配策略,这种策略就是FIXED_HEIGHT和FIXED_WIDTH。

一般采用FIXED_HEIGHT和FIXED_WIDTH策略。因为这两策略会根据固定方向(高或宽)重新计算变化方向(宽或高)的设计分辨率,计算后的设计分辨率的宽高比尽可能接近屏幕分辨率宽高比,而不是直接使用我们给的设计分辨率,防止拉伸变形或展示不全,使得图片最终能自适应屏幕的高或宽,并且都能够充满屏幕,没有黑边。

‎Cocos2d-x 学习笔记(23) 分辨率与屏幕适配的更多相关文章

  1. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  2. [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. iOS :学习新技术途径和sizeClasses屏幕适配

    1.了解有什么新技术 1> 苹果API文档 - General - Guides - iOSx API Diffs 2> 观看WWDC会议视频 2.如何使用新技术 1> 自己根据AP ...

  4. Linux下汇编语言学习笔记23 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. android学习笔记23——菜单

    菜单在桌面应用程序中使用非常广泛,由于手机屏幕的制约,菜单在手机应用中减少不少. android应用中的菜单默认是不可见的,只有当用户单击手机上“Menu”键时,系统才会显示该应用关联的采用项. an ...

  6. Python学习笔记23:Django构建一个简单的博客网站(一个)

    在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...

  7. Kali学习笔记23:Web渗透简介

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 我这里先说几句: 其实从缓冲区溢出到Web渗透之间还有 ...

  8. C++学习笔记23,类内函数重载

    该博文仅用于交流学习.请慎用于不论什么商业用途,本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 在一个类内,最常见的就是构 ...

  9. iOS学习笔记(3)— 屏幕旋转

    一.屏幕旋转机制: iOS通过加速计判断当前的设备方向和屏幕旋转.当加速计检测到方向变化的时候,屏幕旋转的流程如下: 1.设备旋转时,系统接收到旋转事件. 2.系统将旋转事件通过AppDelegate ...

随机推荐

  1. Linux、Windows 和 Mac 中的换行符对比

    原文地址:Linux.Windows 和 Mac 中的换行符对比 博客地址:http://www.moonxy.com 一.前言 经常使用 Window.Linux 等不同操作系统的开发者,在处理文本 ...

  2. 模板引擎Velocity学习系列-#set指令

    #set指令 #set指令用于向一个变量或者对象赋值. 格式: #set($var = value) LHS是一个变量,不要使用特殊字符例如英文句号等,不能用大括号括起来.测试发现#set($user ...

  3. sql字段为逗号分开的字符串值的关联查询

    1.TREE表: [strID] [int] IDENTITY(1,1) NOT NULL,[strName] [nvarchar](50) NOT NULL, 2.SubInfo CREATE TA ...

  4. maven的pom.xml详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. Kubernetes学习之k8s

    k8s是什么 云原生 越来越多的开发者不仅使用容器作为应用部署和运行的载体,还积极使用了与容器这个应用载体天生匹配的微服务的架构,并依靠容器调度编排引擎的帮助,以保持对外部的敏捷性,这种容器化的微服务 ...

  6. asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

    前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner passwor ...

  7. Windows上部署MySql

    下载安装包 最新版本可以在 MySQL 下载中下载. 下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 D:\Program Files\Java\mysql-8.0.16-w ...

  8. selenium-01-2环境搭建

    首先下载好Eclipse 和配置好Java 环境变量 步骤省略, 请百度     方法一 添加jar包 官方下载地址: http://www.seleniumhq.org/download/ 官方地址 ...

  9. JavaScipt第四天笔记

    JS笔记 1.以后遇到用构造函数创建对象就用NEW 2.用构造函数创建对象语法: var obj1 = new Object();//创建一个空对象 var obj2 = new Object({ n ...

  10. mysql having和using使用

    1.having当用到聚合函数sum,count后,又需要筛选条件时,就可以考虑使用having,因为where是在聚合前筛选记录的,无法和统计函数一起使用,而having在聚合后筛选记录,可以和统计 ...