Cocos2d-x多分辨率支持

设计分辨率

缩放策略

Cocos2d-x通过setDesignResolutionSize来设置设计分辨率。

1
2
3
4
class CC_DLL GLViewProtocol {
public:
virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);
}

参数widthheight用来指定设计分辨率的尺寸,resolutionPolicy用来指定缩放策略,根据不同的缩放策略,会形成不同的缩放因子。
缩放策略由ResolutionPolicy枚举定义。

1
2
3
4
5
6
7
8
enum class ResolutionPolicy {
EXACT_FIT,
NO_BORDER,
SHOW_ALL,
FIXED_HEIGHT,
FIXED_WIDTH,
UNKNOWN,
}

EXACT_FIT表示充满整个屏幕,它直接将设计分辨率缩放为屏幕分辨率,它是所有缩放策略中唯一一个不按等比缩放的策略。因此,如果设计分辨率与屏幕分辨率的长宽比不相等,则可能导致拉伸或压缩发生变形。
NO_BORDER保持充满屏幕,并且保持等比缩放。它实际上使较窄的一边充满屏幕。如果涉及分辨率和屏幕分辨率的长宽比不一致,将导致部分区域被裁减。实际上,场景区域会被居中对齐到屏幕。
SHOW_ALL保持所有元素可见,并且保持等比缩放,这种情况实际上是使较宽一边充满屏幕,因此如果设计分辨率和屏幕分辨率不一致,则会导致较窄一边出现黑边。实际上,场景仍然是被居中对齐到屏幕,所以黑边平均分布在两边。
EXACT_FIT、NO_BORDER、SHOW_ALL有一个共同点,即开发者不需要对元素的文职作出任何调整,都是一些比较简单但是有缺陷的缩放策略。
FIXED_XXX根据开发者指定的一边来建立缩放比例。它使用屏幕左下角点作为原点,并且充满屏幕。如果设计分辨率与屏幕分辨率不一致,则会导致另一条边出现空白。这需要开发者对这一条边的元素位置作出适当的调整。