作为手游的载体,手机的发展日新月异,不仅是性能提高,尺寸的多样化也成了一大亮点。本节课将介绍由Cocos2d-X提供的:如何匹配不同分辨率手机屏幕办法中的设计分辨率部分。
1、根据不同的屏幕分辨率设计不同的元素缩放比例
2、通过函数获取屏幕尺寸,根据屏幕尺寸按照一定比例设置元素
3、按照一个预定义的分辨率设计,由游戏引擎来根据这个分辨率针对不同的实际屏幕分辨率进行调整。
在第3种情况中,开发者定义设计分辨率,并提供给游戏引擎缩放系数(缩放策略);以及资源缩放因子用于对资源的尺寸进行调整。
缩放策略:
1、ResolutionPolicy::EXACT_FIT,满屏显示,可能会由于宽高比不同,出现比例不协调的现象。视口为屏幕分辨率,绘制区域是设计分辨率表示的区域,绘制原点为设计分辨率对应区域的原点。
2、ResolutionPolicy::NO_BORDER,超过屏显示,以较大的缩放系数为准,内容会显示到屏幕外,然后被裁剪。居中显示,视口大于屏幕分辨率,绘制区域是设计分辨率表示的区域,绘制原点为设计分辨率对应区域的原点。
3、ResolutionPolicy::SHOW_ALL,小于屏显示,以较小的缩放系数为准,内容全部都会显示到屏幕内,可能出现黑边。居中显示,视口小于屏幕分辨率,绘制区域是设计分辨率表示的区域,绘制原点为设计分辨率对应区域的原点。
4、ResolutionPolicy::FIXED_xxxxx,以指定边的缩放系数为准,可能满屏显示,也可能出现空白。视口等于屏幕分辨率,绘制区域不是设计分辨率表示的区域,而是实际的屏幕分辨率,所以写应用程序的时候不能写绝对值坐标。(当然固定的这个边是可以写固定值的)
Director::getInstance()->getWinSize()可得到绘制区域的分辨率,在ResolutionPolicy::NO_BORDER会超过实际分辨率,在ResolutionPolicy::SHOW_ALL会小于实际分辨率,在ResolutionPolicy::EXACT_FIT、ResolutionPolicy::FIXED_xxxxx等于实际分辨率。
Director::getInstance()->getVisibleSize()可得到绘制区域在可视区域的分辨率。
Director::getInstance()->getWinSizeInPixels()可得到绘制区域在OpenGL ES的真实区域的大小。
Director::getInstance()->getVisibleOrigin()可得到可视区域原点在绘制区域的位置,仅当ResolutionPolicy::NO_BORDER的情况下有用。
GLView::getFrameSize()可得到实际屏幕分辨率。Director::convertToUI用于返回一个基于设备UI系统的坐标值。
GLView::setDesignResolutionSize会导致viewport、透视矩阵、观察点位置的重新设置。setViewPortInPoints会将设计分辨率转换为基于屏幕实际像素大小的坐标信息。而透视投影矩阵、观察点的位置都是根据_winSizeInPoints设计的。
笔者制作网站的目的,主要是借用自己之前的知识背景(Android App开发和图形学知识),将自己学习笔记拿出来,和大家一起进行交流,毕竟每个人的知识体系不同,有交流才会有提高,所以欢迎大家通过各种方式和我联系。
网址:www.geekfaner.com
youku教学视频:http://i.youku.com/geekfaner
“百度传课”教学视频(高清版_推荐):http://www.chuanke.com/s2588605.html