课程概述
“Cocos2d-X的多分辨率支持(1)”课程概述
作为手游的载体,手机的发展日新月异,不仅是性能提高,尺寸的多样化也成了一大亮点。本节课将介绍由Cocos2d-X提供的:如何匹配不同分辨率手机屏幕办法中的设计分辨率部分。
课程笔记
不同的分辨率按照怎样的方式缩放元素
1、根据不同的屏幕分辨率设计不同的元素缩放比例
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设计的。
原文地址:
http://www.geekfaner.com/cocos2d-x/ReadCocos2dxSourceCode20.html