屏幕适配

来源:互联网 发布:windows 端口映射工具 编辑:程序博客网 时间:2024/06/11 22:43

FrameSize就是屏幕的实际分辨率,这是不变的,比如我用的盖世三的手机分辨率为1280x720,这就是盖世三的FrameSize

注意这个FrameSize很容易理解成屏幕的长宽多少,其实不是,分辨率和实际的长宽没有必然联系。

  比如:盖世3的尺寸(长宽)为4.8寸,分辨率为1280x720

盖世4的尺寸(长宽)为4.99寸,分辨率为1920x1080

所以在设计游戏时,只考虑屏幕的分辨率即可,不用考虑屏幕的实际长宽。

WinSize就是设计分辨率,相当于游戏设计的逻辑大小,可以这样理解,上面的FrameSize就是画框,这里的WinSize就是画布。

VisibleSize就是画布显示在画框中的部分,注意:它的大小是用WinSize来表示的。

VisibleOrigin就是VisibleSize在画框中的左下角坐标点,注意也是用WinSize来表示的。

比如:

FrameSize:假设为width = 720, height = 420

WinSize:假设为width = 360, height = 240

kResolutionNoBorder模式下,实例图像如下:

 

此时的VisibleSize就是HIKJ,此时的VisibleSizeWidth = 360, height = 210

因为FrameSize的长宽比为720420 = 360210,而我们的设计分辨率为360240,所以在kResolutionNoBorder模式下,被画框截下来的设计分辨率

就为360210

此时的VisibleOrigin就是在VisibleSize中的K,坐标为(015),右图中可以看出15 = 240-210/2

自我总结:

其实设计分辨率(WinSize)就是程序里面的逻辑画布大小,是我们需要去关注的东西,我们所有的绘图元素都是放在逻辑大小的画布上的。

至于设计分辨率显示到屏幕分辨率(FrameSize),是通过程序给我们的几种模式(kResolutionExactFitkResolutionNoBorderkResolutionShowAllkResolutionFixedHeightkResolutionFixedWidth)让我们去适配的,去决定画布的那些部分需要显示在画框中(手机屏幕)上。

void AppDelegate::initResolution(GLView* glView)

{

Size visibleSize = Size(960.f, 640.f);

Point origPoint = Vec2::ZERO;

 

Size frameSize = glView->getFrameSize();

float scale = frameSize.height / frameSize.width;

if (scale <= 0.600f) //-0.600f

{

if (scale >= 0.563f)

origPoint.y = (1136.f / frameSize.width * frameSize.height - 640.f) / 2.f;

visibleSize = Size(1136.f, 640.f + origPoint.y * 2.f);

}

else if (scale <= 0.625f) //0.600--0.625

{

origPoint.y = (1136.f / frameSize.width * frameSize.height - 682.f) / 2.f;

visibleSize = Size(1136.f, 682.f + origPoint.y * 2.f);

}

else if (scale <= 0.667f) //0.625--0.667

{

origPoint.x = (640.f / frameSize.height * frameSize.width - 960.f) / 2.f;

visibleSize = Size(960.f + origPoint.x * 2.f, 640.f);

}

else if (scale <= 0.703f) //0.667---0.703

{

origPoint.y = (960.f / frameSize.width * frameSize.height - 640.f) / 2.f;

visibleSize = Size(960.f, 640.f + origPoint.y * 2.f);

}

else //0.703---

{

if (scale <= 0.75f)

origPoint.x = (720.f / frameSize.height * frameSize.width - 960.f) / 2.f;

visibleSize = Size(960.f + origPoint.x * 2.f, 720.f);

}

 

DESIGNSIZE = visibleSize;

glView->setDesignResolutionSize(visibleSize.width, visibleSize.height, ResolutionPolicy::SHOW_ALL);

}

原创粉丝点击