cocos2d-x 4.0 学习之路(十九)多分辨率适配:setDesignResolutionSize的使用

这篇我要说的是你做的游戏如何去适应各个手机、平板、电脑等的分辨率。
先来说几个概念:

  1. 设计分辨率:这个就是你制作游戏时候的分辨率。你的游戏在这个分辨率下跑,是最最完美的。
  2. 屏幕分辨率:那就是我们的手机分辨率。在电脑上的话,这个值是你自己定义的窗体大小。你想让玩家在多大的窗口里玩你的游戏。

那么,这两个分辨率如果一致,那当然就最好的了;要是不一致,你的游戏如何去适应这个不同分辨率的屏幕,就是我们要解决和关心的问题了。

其实,cocos2d-x已经为我们想到过这个问题了,要不它怎么能成为主流的开发引擎呢。
那我们先找一下,它的设计分辨率和屏幕分辨率都在哪呢?都在AppDelegate.cpp中。
有个变量定义,这个就是设计分辨率了:static cocos2d::Size designResolutionSize = cocos2d::Size(1024, 768);
屏幕分辨率是下面这段代码:

    if(!glview) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
        glview = GLViewImpl::createWithRect("HelloWorld", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));
#else
        glview = GLViewImpl::create("HelloWorld");
#endif
        director->setOpenGLView(glview);
    }

解释一下,屏幕分辨率会首先判断的运行的平台,
如果是windows or Mac or Linux,也就是说运行在电脑端,它会让你定义这个分辨率的大小,默认是和你的设计分辨率一样。
如果不是以上3种平台,那也就是说在手机端运行,这时候你就不能定义它了,它只能是你手机的分辨率。

接下来是重点,cocos2d-x通过这个setDesignResolutionSize函数来设定设计分辨率,同时让你指定分辨率适配策略。它的完整的写法是:

glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);

3个参数分别是设计分辨率的宽、高、分辨率策略。
也就是说,当你的屏幕分辨率和设计分辨率不一致时,cocos2d-x通过第3个参数ResolutionPolicy,来自动调整你游戏的资源如何去显示。
好,那么这个分辨率策略都有啥呢,有这么些:

// CCGLView.h
enum class ResolutionPolicy
{
    EXACT_FIT,
    NO_BORDER,
    SHOW_ALL,
    FIXED_HEIGHT,
    FIXED_WIDTH,
    UNKNOWN,
};

为了讲清他们的区别,我做了几个小实验,一起看效果来理解它们。
首先,看一下设计分辨率和屏幕分辨率都是1024x768的效果。
在这里插入图片描述
接下来,我把屏幕分辨率变大,宽变成了1280,高不变:glview = GLViewImpl::createWithRect("HelloWorld", cocos2d::Rect(0, 0, 1280, designResolutionSize.height));
看一看各个策略的效果:
EXACT_FIT:充满整个屏幕。就是把你的图整个拉伸填满屏幕。一般不建议使用。
在这里插入图片描述
NO_BORDER:它也是充满屏幕,但它是等比缩放。仔细观察,背景的上下都被切下去了一条的。实际上,它是用这个两个分辨率的宽和高做比较,哪个大就取哪个做为基准显示。在我们例子中,屏幕的宽比设计分辨率的宽要大,所以它把背景从1024x768扩大成1280x960,但是屏幕的高只有768,所以上下多余的部分你就看不到了。所以你看这个人头会大一些。NO_BORDER是默认的策略参数。
在这里插入图片描述
SHOW_ALL:保持全部元素可见,等比缩放。它和NO_BORDER是相反的,它为了把全部资源都能展现出来,把资源都给缩小了。但问题就是会产生黑边。
在这里插入图片描述
FIXED_HEIGHT:等比缩放,按屏幕的高来建立缩放比例。有人说,这个看着SHOW_ALL没啥区别呀?请仔细看,找茬!屏幕左边的文字位置是不一样的哦。这里涉及到一个有效区域的问题,我们下篇再讲。只要知道这种策略下,绘制区域是可以在设计分辨率之外的。所以开发的时候要注意,不能使用绝对座标。
在这里插入图片描述
FIXED_WIDTH:等比缩放,按屏幕的宽来建立缩放比例。和FIXED_HEIGHT一个道理。
在这里插入图片描述
总结下来就是,你选用何种分辨率策略,那么你在设计游戏的时候就有不同的注意点和取舍点。比如你用SHOW_ALL,全显示了嘛,比例还不变,所有机型都能用,有些黑边那就忍忍吧。实在忍不下去,再想办法给解决掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章