【3.x】https://blog.csdn.net/qq_40338728/article/details/82964046

【屏幕适配】

1、两个分辨率

1.1、窗口分辨率

main.cpp中有个设置窗口分辨率的函数。该函数是设置了我们预想设备的屏幕大小,也就是应用程序窗口的大小。

//
eglView->setFrameSize(480, 320);
//

1.2、设计分辨率(可视区域)

AppDelegate.cpp中也有个设置设计分辨率的函数。该函数是设置了我们游戏设计时候的分辨率,也就是可视区域的大小,也就是说设计者初衷的游戏可视区域的分辨率屏幕大小。

但是对于每个用户来说,他们使用的设备不一定是(480/320)的,比如手机有大有小。

而后面的kResolutionShowAll,意思是按照原比例(480/320)进行放缩以适配实际屏幕大小。

//
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480,320,kResolutionShowAll);
//

以下贴了三张对比图,加深理解。

(1)这是原图片大小,窗口大小为480 * 320。

(2)若设置窗口大小为setFrameSize(960, 640),而不设置设计分辨率kResolutionShowAll的情况下,图片不放缩,原图还是480 * 320。

(3)设置了kResolutionShowAll之后,图片放缩到适配整个屏幕960 * 640 了。

2、五种适配模式

从上面的讲解我们可以了解到,setFrameSize()是设置了窗口大小(即屏幕的实际大小),而这个参数只是为了我们开发时作为模拟参照,在实际手机上运行时,手机的屏幕大小是我们无法设置的。

而屏幕适配的关键在于setDesignResolutionSize(),通过它来设置可视区域的分辨率以及屏幕适配模式。该函数的前两个参数为分辨率(即屏幕长宽比例),而最后一个参数则是适配的模式。

2.1、适配模式

(1)kResolutionExactFit   :拉伸变形,使铺满屏幕。

(2)kResolutionNoBorder   :按比例放缩,全屏展示不留黑边。

(长宽中小的铺满屏幕,大的超出屏幕)

(3)kResolutionShowAll    :按比例放缩,全部展示不裁剪。

(长宽中大的铺满屏幕,小的留有黑边)

(4)kResolutionFixedWidth :按比例放缩,宽度铺满屏幕。

(5)kResolutionFixedHeight:按比例放缩,高度铺满屏幕。

2.2、计算方法

假设:屏幕分辨率(fWidth,fHeight) ; 设计分辨率(dWidth,dHeight)。

      放缩因子:k1 = fWidth/dWidth ; k2 = fHeight/dHeight。

则适配后的分辨率大小如下:

(1)kResolutionExactFit   :( dWidth * k1         , dHeight * k2         )

(2)kResolutionNoBorder   :( dWidth * max(k1,k2) , dHeight * max(k1,k2) )

(3)kResolutionShowAll    :( dWidth * min(k1,k2) , dHeight * min(k1,k2) )

(4)kResolutionFixedWidth :( dWidth * k1         , dHeight * k1         )

(5)kResolutionFixedHeight:( dWidth * k2         , dHeight * k2         )

2.3、有图有真相

屏幕大小:400 X 400 。

可视区域大小:480 X 320 。

        

        

        

3、横竖换屏

cocos2dx开发的游戏,在手机上运行的时候,默认是横屏的

3.1、Android

AndroidManifest.xml文件中

(1)android:screenOrientation = "landscape"   //横屏显示(默认)

(2)android:screenOrientation = "portrait"    //竖屏显示

3.2、IOS

//
- (NSUInteger) supportedInterfaceOrientations{
//横屏显示
//return UIInterfaceOrientationMaskLandscape; //竖屏显示
return UIInterfaceOrientationMaskPortrait;
}
//

4、屏幕大小及坐标

(1)WinSize        :屏幕大小

(2)VisibleSize    :可视区域大小

(3)VisibleOrigin  :可视区域的左下角坐标

//
CCDirector::sharedDirector()->getWinSize()
CCDirector::sharedDirector()->getVisibleSize();
CCDirector::sharedDirector()->getVisibleOrigin();
//

图解:

cocos2dx基础篇(27) 屏幕适配的更多相关文章

  1. cocos2dx基础篇(3) 常用重要类

    ---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...

  2. cocos2dx[3.2](5) 屏幕适配

    1.两个分辨率 1.1.窗口分辨率 在AppDelegate.cpp中有个设置窗口分辨率的函数.该函数是设置了我们预想设备的屏幕大小,也就是应用程序窗口的大小. // glView->setFr ...

  3. 【Cocos2d入门教程二】Cocos2d-x基础篇

    上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: a.环境设定(帧率 初始化ope ...

  4. cocos2dx进阶学习之屏幕适配

    背景 在学习cocos2dx时,我们在main函数中发现一句代码, #include "main.h" #include "AppDelegate.h" #in ...

  5. cocos2dx基础篇(28) 布景层Layer的三个子类

    [3.x]     (1)去掉 "CC" [CCLayerColor] 颜色布景层CCLayerColor有两个父类:CCLayerRGBA.CCBlendProtocol.相信有 ...

  6. cocos2dx基础篇(23) 粒子系统CCParticleSystem

    [3.x]     (1)去掉"CC"     (2)粒子位置模式 tPositionType 改为强枚举类型 ParticleSystem::PositionType:: // ...

  7. cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate

    [小知识] CCSpriteFrame     :精灵帧.    它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame  :动画帧.    由精灵帧与间隔帧数组成,是动画CC ...

  8. cocos2dx基础篇(7) 触碰事件

    cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的.比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作.想一想之前讲的菜单按钮CC ...

  9. cocos2dx基础篇(6) 定时器schedule/update

    定时器在大部分游戏中是不可或缺的,即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面.时间.进度.敌人的指令等等.cocos2dx为我们提供了定时器schedule相关的操作.其操作函数的定义 ...

随机推荐

  1. string::erase

    sequence (1) string& erase (size_t pos = 0, size_t len = npos);两个参数都有默认值,传递的唯一参数匹配第一个 character ...

  2. 清北学堂提高组突破营游记day3

    讲课人更换成dms. 真的今天快把我们逼疯了.. 今天主攻数据结构, 基本上看完我博客能理解个大概把, 1.LCA 安利之前个人博客链接.之前自己学过QWQ. 2.st表.同上. 3.字符串哈希.同上 ...

  3. idea:spring initializr无web勾选,maven方式搭建springboot项目。jdk7创建springboot项目的版本不兼容问题。

    一.idea 使用spring initializr不选择web搭建springboot项目 1.file => new => project 2.直接next到finish结束. 3.完 ...

  4. mysql每日数据统计

    select a.click_date from ( SELECT curdate() as click_date union all day) as click_date union all day ...

  5. 【BZOJ2752】【Luogu P2221】 [HAOI2012]高速公路

    不是很难的一个题目.正确思路是统计每一条边被经过的次数,但我最初由于习惯直接先上了一个前缀和再推的式子,导致极其麻烦难以写对而且会爆\(longlong\). 推导过程请看这里. #include & ...

  6. 并发编程的锁机制:synchronized和lock

    1. 锁的种类 锁的种类有很多,包括:自旋锁.自旋锁的其他种类.阻塞锁.可重入锁.读写锁.互斥锁.悲观锁.乐观锁.公平锁.可重入锁等等,其余就不列出了.我们重点看如下几种:可重入锁.读写锁.可中断锁. ...

  7. qt5---步长调节器SpinBox和QDoubleSpinBox

    #include <QSpinBox>            #include <QDoubleSpinBox> QSpinBox 用于整数的显示和输入,一般显示十进制数,也可 ...

  8. (转)window.open和window.showModalDialog的区别

    window.open和window.showModalDialog区别: 1.都是在IE上打开新窗口,只不过前者是非阻塞式,也可以说非模态窗口.而后者是阻塞式模态窗口.阻塞或者模态窗口,只有你把当前 ...

  9. 格子游戏x(并查集)

    格子游戏 [问题描述] Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:           直到围成一个封闭的圈( ...

  10. ID生成 雪花算法

    /** * ID生成 雪花算法 */ public class SnowFlake { public static SnowFlake getInstance() { return Singleton ...