Cocos2d-x 屏幕适配解决方案

第一,对于屏幕适配问题,首先必须理解几个基本的概念。

FrameSize:实际上就是设备的原始分辨率,开发环境中可以通过CCEGLView::sharedOpenGLView()->setFrameSize()来设置设备的分辨率大小,当然也可以可以通过CCEGLView::sharedOpenGLView()->getFrameSize()获取得到设备的分辨率

 

WinSize:开发所设计的分辨率,即setDesignResolutionSize方法中传入的前两个参数,通过CCDirector::sharedDirector()->getWinSize()获取

 

VisibleSize:一定小于等于WinSize,即在WinSize范围之内,保持FrameSize宽高比的最大显示区域。

 

VisibleOrigin:在WinSize下被FrameSize截取的区域大小,即设计分辨率中与屏幕左下角对应的点。

 

第二,cocos2d-x自带的三种适配方案

这里我们将设备的分辨率改为768*1024,开发设计的分辨率为640*960,背景图为大小为640*960,在屏幕居中显示,cocos2d-x默认的适配方案得到的效果:

可以看出由于没有采用合理的适配方法,图像会根据我们设置的位置显示大小,如果图像本身比设备分辨率大,则只显示设备分辨率大小的图像,反之则会留有空余处,如上图的黑边。如我们采用下面三种基本的适配方案又会得到不同的效果

 

kResolutionExactFit:通过拉伸来填满屏幕,宽高比不同,图片无法等比缩放来填充屏幕,图片会扭曲变形,如图中间的人物原先是正方形的,现在变成了长方形,界面稍复杂,就会看见明显的不协调,这种方式通常不可取。

kResolutionNoBorder:无黑边,宽高等比缩放,但缩放的比例按照宽比和高比中大的来进行。这样出现的结果可能就是有图片的一部分会显示在屏幕的外面。

kResolutionShowAll:全部显示,保证内容在屏幕内显示,同样是宽高等比缩放,但缩放比例取小的进行。按这种方式适配可能会在屏幕上出现黑边,如果打算在黑边出填放别的精灵是无效的,因为等比缩放后,黑边的部分不会进行绘制。假如设计分辨率低于大部分设备分辨率,在忽略黑边的情况下,这种适配方式可以满足大部分设备,而我们后面改进的适配方案就是把留出来的黑边利用上

以上三种适配方式虽然能在一定问题上能解决适配的问题,不过对于现今各式各样、众多分辨率的设备来说,想要一套资源适配所有设备而不做资源的更改是不可能的,这点必须明白。没有一种完美的适配方案,而我们所做的不过是尽量更完善,那如何找到一种行之有效的适配方案呢?在保持图像基本不变形的情况下我们可以对第二种,第三种适配方案进行改进。

 

根据设备分辨率改变WinSize的大小:

由这个思路,假如我们预设WinSize为(640,960),先计算设备分辨率和设计分辨率的宽比与高比

float scaleX=frameSize.width/designSize.width;

float scaleY=frameSize.height/designSize.height;

在第三种方案基础上进行改进,依旧选择宽高比小的进行缩放,这里选择scaleY,由于第三种方案会产生黑边,而我们又无法利用黑边,所以改进的方案就是把黑边利用上,那如何利用上呢?前面说过,黑边是由于宽高比例不同造成的,这样我们可以反过来思考,让设备分辨率和设计分辨率宽高比一致。所以在这种前提下,我们得到了一种解决办法,假设设备两者的宽高比一致的情况下,WinSize的宽高为多少才合适,在本例中我们需要算出WinSize的宽,计算方法如下:

frameSize.width/scaleY;

将计算出来的宽和我们预设的设计分辨率的高作为传入的WinSize的值,这样我们就能把黑边利用上了

pEGLView->setDesignResolutionSize(frameSize.width/scaleY,designSize.height,kResolutionShowAll);

时间: 2024-08-03 17:04:31

Cocos2d-x 屏幕适配解决方案的相关文章

指令汇B新闻客户端开发(六) 浅谈屏幕适配解决方案

     屏幕适配的问题,我相信很多大牛的经验远比我丰富,在此就简单的分享一下我所做的的屏幕适配方案,当然我说的是安卓方面的啦,嘿嘿,屏幕适配我们一般用1280*720的屏幕作为我们的主流开发屏,当然现在AndroidStudio上面可以直接看到所有种类的屏幕,大大方便了我们的开发.     我们遵循的原则是不用AbsoluteLayout(绝对布局),多用相对布局&线性布局(权重), 要用dp,不用px.     开发后期, 在不同分辨率屏幕上测试(480*800,1920*1080), 如果

ios-iOS iphone和iPad屏幕适配

问题描述 iOS iphone和iPad屏幕适配 怎么做一个能同时适配iPhone和iPad的APP,两套xib共用一套代码,xcode用的是最新的xcode7 解决方案 ios xib适配iPhone,iPad语句iOS:适配iPad的横屏Iphone图像渲染与屏幕适配 解决方案二: 你这个问题太宽泛了,要细化 解决方案三: 主要问题是在于分辨率,界面要自适应,可以缩放,如果感觉麻烦,也可以根据分辨率来写死,界面分成两套,但逻辑是一套 解决方案四: 主要问题是在于分辨率,界面要自适应,可以缩放

利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题

上一篇文章详细讲解了一下onMeasure/measure方法在Android自定义控件时的原理和作用,参看博文:Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一),今天就来真正实践一下,让这两个方法大显神威来帮我们搞定图片的屏幕适配问题. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45038329,非允许请勿用于商业或盈利用途,违者必究. 使用ImageView会遇到

安卓-Android 求大神帮忙解决屏幕适配的问题

问题描述 Android 求大神帮忙解决屏幕适配的问题 小弟是一个初学者,不会弄这种屏幕适配的问题,如何让这些书本不论在何种尺寸的屏幕上都能刚好在书架上? 解决方案 1.相应的尺寸会有相应的文件,相应的文件有相应的图片. 2.在编程中尽量使用dp不要使用px

ios-Xcode6 如何利用storyboard实现不同设备下的屏幕适配

问题描述 Xcode6 如何利用storyboard实现不同设备下的屏幕适配 我知道用autolayout 加约束 但是我一直有个疑问 比如两个视图 一个高100 一个高300 放在屏幕中央 怎么让他们等比例放大缩小呢? 他们两个的间距, 还有上面视图到上面 下面视图到下面的 间距都是固定的 就是要让他们的宽度比固定 宽度自适应 - - 我想不出来怎么加约束 求教啊 现在在做适配 急 在线等..... 解决方案 这个问题不好答,我也想知道答案 解决方案二: - 好把 有人没呀 求解答啊 解决方案

iOS屏幕适配-iOS笔记

学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeClass的基本用法 一.屏幕适配的发展史 随着iOS屏幕尺寸越来越多样化,屏幕适配也就越来越重要了. iphone1 - iphone3gs时代,window的size固定为(320,480).我们只需要简单计算一下相对位置就好了,不需要做屏幕适配. iphone4 - iphone4s时代,苹果推出了

Cocos2d-x 屏幕适配新解

为了适应移动终端的各种分辨率大小,各种屏幕宽高比,在 cocos2d-x(当前稳定版:2.0.4) 中,提供了相应的解决方案,以方便我们在设计游戏时,能够更好的适应不同的环境. 而在设计游戏之初,决定着我们屏幕适配的因素有哪些,简而言之只有两点:屏幕大小 和 宽高比.这两个因素是如何影响游戏的: 屏幕大小: 从小分辨率 480x320 到 1280x800 分辨率,再到全高清 1080p,从手机到平板,还有苹果设备的 Retina 屏,这么多不同的分辨率,而且大小差距甚大,不可能做到一套资源走天

图片-Android屏幕适配问题,菜鸟求助

问题描述 Android屏幕适配问题,菜鸟求助 如题, 本人菜鸟不知道怎么屏幕适配呀, 我用的是demin建立了两个文件, 一个是(1280x720的),另外一个是1920x1080的. 在里面写的尺寸.因为我们美工给我的图片都是px的. 换算如下 解决方案 做android开发,开源嘛,满市场都是凌乱的机型,总少不了适配这样或那样的型号.在这里分享一下自己在开发中用到的方法. 首先要介绍一下drawable-mdpi.drawable-hdpi-1280x800.drawable-hdpi.这

【HIMI转载推荐之二】COCOS2D-X 屏幕适配新解(比较全面比较详细)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/1404.html 本文出自 [无间落叶]原文地址:http://blog.leafsoar.com/archives/2013/05-10-19.html 为了适应移动终端的各种分辨率大小,各种屏幕宽高比,在 cocos2d-x(当前稳定版:2.0.4) 中,提供了相应的解决方案,以方便我们在设计游戏时,能够