cocos2d-x 2.x屏幕适配基础

  一开始我就忽略了屏幕适配的问题,现在才发现它是多么的重要。通过实践才领悟了其基础概念,而屏幕适配的策略是建立在其上的,有很多,但我还没有认真研究。这里仅把自己对屏幕适配基础知识进行一个梳理。

  关于屏幕适配,有一个基础单位:像素。像素构成了分辨率,不应该把分辨率理解为大小。因此这里不说大小,只说分辨率;不说长宽,只说横纵。

  1.FrameSize

  这个最好理解,就是设备的分辨率,不同的手机有不同的分辨率。事实上,在PC上面开发也有一个设备分辨率,那就是在main.cpp里面设置的窗口分辨率,这个窗口应该理解为设备。因此不必在手机上模拟屏幕适配策略,在PC模拟上就足够了。通过:

CCEGLView::sharedOpenGLView()->getFrameSize();

  就可以得到设备的分辨率,它是屏幕适配的基础。注意,设备分辨率一定是动态变换的,根据不同设备能获得不同的值。

  2.winSize

  很多教程中把它说成是设计分辨率,也许很恰当,但是我感觉不太好理解。我把它叫做游戏分辨率。它就像是一个画布,必须附着在画板上面,这个画板就是设备屏幕。如果不手动设置的话,其默认值就和程序入口时设置的设备分辨率一样。所以,在PC上开发,默认情况下游戏的分辨率和窗口分辨率是一定保持一致的,但由于不同平台程序入口不一致(不是引擎入口),放到手机上就会出现不适配的情况了。游戏分辨率和设备分辨率是不同的概念,是两码事。

  我们需要手动设置winSize,手动设置winSize,就是所谓的屏幕适配。在后文详述。

  3.visibleSize

  我还是觉得其它教程对它的描述模糊不清。我把它叫做可见游戏分辨率。什么叫可见游戏分辨率?就像一张大画布,大过了所依附的画板,会多出去一些布料,无论如何,这张画布都是游戏分辨率。但是只有处在画板内部的那部分画布,才能算作可见游戏分辨率(只是个比方,其实出现这种情况,visibleSize还是要大于frameSize的)。visibleSize就是显示于FrameSize里面的winSize。关于这个概念点,我的描述还是不很精当。不过只要理解了winSize就行,visibleSize就是winSize的子集。

  接下来就可以来分析引擎提供的屏幕适配方案了。

  有意思的是,引擎把设置游戏分辨率(winSize)和适配参数放在了一个接口里面:pEGLView->setDesignResolutionSize (float width, float height, ResolutionPolicy resolutionPolicy)

  适配参数有5个可用值,ShowAll, NoBorder, ExactFit并没有改变游戏分辨率,只是通过一个比例获得了一个新的分辨率,我把它叫做实际游戏分辨率,这才是呈现给玩家的真实游戏分辨率。虽然它原则上必须跟设备分辨率一致,但还是两码事。剩下的两个参数是FixedHeight和FixedWidth,它们用来修改游戏分辨率,也就是改动了winSize,保证了winSize的横纵比例与FrameSize的横纵比例一致。我做了张图表,表示其效果。

  

    横(像素) 纵(像素) 效果
设备分辨率(frameSize) 640 960
游戏分辨率(winSize) 720 1200
ratio(设备/游戏) 0.888888889 0.8
实际分辨率(winSize) ShowAll 576 960 根据小ratio计算实际分辨率,左右出现黑边(图1)
NoBorder 640 1067 根据大ratio计算实际分辨率,上下超出屏幕(图2)
ExactFit 640 960 出现拉伸
FixedHeight 640 960 根据frameSize的横纵比,改变winSize宽为800
FixedWidth 640 960 根据frameSize的横纵比,改变winSize高为1080

  再举两个图例:

  ShowAll:

  NoBorder:

  红色框框表示的范围就是实际分辨率,即真实的游戏分辨率。可以看到在NoBorder策略中,实际分辨率的纵轴达到了1067像素,大于设备分辨率的纵轴的960像素,因此超出去了一部分。同时visibleSize也小于winSize,它等于960除以大的ratio,等于1080。虽然我们不好观测winSize以及visibleSize,但是很明确地知道它们实实在在存在着,实际分辨率就是winSize的缩影。

  至此,才大略整理了引擎的屏幕适配基础。但设备屏幕许许多多,适配方法肯定是很多的。如今实践不足,只能留待日后总结了!

  最后再记录一条在安卓开发环境中修改横竖屏的方法:

  在AndroidManifest.xml文件中,找到android:screenOrientation,"landscape"表示横屏显示,"portrait"表示竖屏显示。

时间: 2024-10-03 21:39:58

cocos2d-x 2.x屏幕适配基础的相关文章

android 屏幕适配基础(1)

1. 概念定义 寸/英寸: 物理像素: 分辨率: 设备独立像素(dip/dp) 2.  单位说明 sp: dp: 整理中...

CSS基础教程 -- 媒体查询屏幕适配

响应式布局 Media Query 的使用方法 在上例中, 我们使用Media Queries来根据3种不同尺寸的窗口使用3种不同的样式.通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达"大于或等于"和"小与或等于".如:width会有min-width和max-width媒体查询可以被用在CSS中的@media和@import规则上,也可以被用在HTML

cocos2d 3.0 屏幕适配

1.解决方案 先直接给出解决方案,再慢慢解释,当然这个解决方案也不是完全完美的. [cpp] view plaincopy //如果是横屏游戏: glview->setDesignResolutionSize(960, 640, ResolutionPolicy::FIXED_HEIGHT); //一张960x640的背景显示 auto visibleSize = Director::getInstance()->getVisibleSize(); auto Bg = Sprite::crea

IOS开发——UI基础-屏幕适配

一.适配 1.什么是适配?适应.兼容各种不同的情况 2.移动开发中,适配的常见种类 2.1系统适配 针对不同版本的操作系统进行适配 2.2屏幕适配 针对不同大小的屏幕尺寸进行适配 二.点和像素 1.在用户眼中屏幕是由无数个像素组成的像素越多,屏幕越清晰 2.在开发者眼中屏幕是由无数个点组成的,点又是由像素组成的像素越多,屏幕越清晰 三.Autoresizing简介 1.在Autolayout之前,有Autoresizing可以作屏幕适配,但局限性较大,有些任务根本无法完成相比之下,Autolay

基础(1、屏幕适配)

基本术语 屏幕尺寸:实际手机主屏的对角线长度,如iphone 4.7英寸: 分辨率:同电脑显示器分辨率,如1334x750像素: 像素密度(DPI 每英寸像素数):即将分辨率压缩至屏幕尺寸中,例如1334/手机长度,如超过326像素/英寸,则成为“视网膜” dip:设备独立像素,是一个逻辑密度计算值,以屏幕密度为160的手机为标准:dip/像素=dpi值/160 android 屏幕适配 drawable-ldpi (dpi=120, density=0.75) drawable-mdpi (d

cocos2dx基础篇(29)——屏幕适配

[唠叨] 手机的屏幕大小千差万别,如现在流行的安卓手机屏幕大部分长宽比例为16:9.而iPhone 5S的长宽比例为71:40(接近16:9),也有预测说iPhone 6S的长宽比例也将会是主流的16:9.另外还有一些平板电脑为4:3.16:10.5:4等等.当然还有一些其他的牌子可能屏幕比例也不一样. 要想让你的程序在各种手机上都能很好的呈现游戏画面,就需要进行屏幕适配. 本节将以下三篇文章进行提炼整合,摘取讲得比较好的段落. [致谢] http://gl.paea.cn/contents/1

cocos2d-x屏幕适配原理分析

cocos2d-x作为著名的cocos2d游戏开发框架的C++实现者,最近一年发展迅猛.越来越多的app使用它实现快速多平台部署,从最初的ios,android,win32等到新近的html5,实现移动,客户端到浏览器全覆盖,不得了~~ 开发移动应用的屏幕适配和爱情一样是一个从洪荒时代就存在的永恒命题,根本目的是实现在不同设备上用户体验的统一. cocos2d-x在cocos2d-2.0-x-2.0.4版本之前没有提供解决的方案,开发者只能自己解决,其中一些方法见 这里从2.0-x-2.0.4开

android屏幕适配详解

android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如果是纯色背景,尽量使用android的shape 自定义. 5.如果需要在特定分辨率下适配,可以在res目录上新建layout

Android屏幕适配

1.基本概念 屏幕大小(screen size) —— 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extra large 屏幕密度(Screen Density) ——  一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点).相比起medium.high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少.android把屏幕密度分为4种:low,medium,h