屏幕适配
来源:互联网 发布: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,此时的VisibleSize为Width = 360, height = 210。
因为FrameSize的长宽比为720:420 = 360:210,而我们的设计分辨率为360:240,所以在kResolutionNoBorder模式下,被画框截下来的设计分辨率
就为360:210
此时的VisibleOrigin就是在VisibleSize中的K,坐标为(0,15),右图中可以看出15 = (240-210)/2
自我总结:
其实设计分辨率(WinSize)就是程序里面的逻辑画布大小,是我们需要去关注的东西,我们所有的绘图元素都是放在逻辑大小的画布上的。
至于设计分辨率显示到屏幕分辨率(FrameSize),是通过程序给我们的几种模式(kResolutionExactFit,kResolutionNoBorder,kResolutionShowAll,kResolutionFixedHeight,kResolutionFixedWidth)让我们去适配的,去决定画布的那些部分需要显示在画框中(手机屏幕)上。
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);
}
- 【Android 屏幕适配】 屏幕适配
- Android 屏幕适配--屏幕旋转
- COCOS2DX屏幕显示与屏幕适配
- Android屏幕适配-----屏幕尺寸
- Android屏幕尺寸单位/屏幕适配
- 屏幕适配
- 【Android】屏幕适配
- android屏幕适配
- android屏幕适配
- android 屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android屏幕适配
- Android屏幕适配
- android 屏幕适配
- 屏幕适配
- Android屏幕适配
- Android屏幕适配
- POJ
- Unity3D_Time时间相关
- linux下安装jdk tomcat
- Dijkstra的双栈算法表达式求值算法(1.3.1 P80)
- (2017.07.24-2017.07.28)周总结-树形结构总结
- 屏幕适配
- 关于List<T>.Add()方法添加的所有项都一样的个人解释,解决方法
- iOS像素和点的转换
- 完成端口IOCP详解
- LeetCode-53-Maximum Subarray(最大和子串)
- (转) 二分法+高精度——Poj 2109 Power of Cryptography(double型开n次方的方法通过的原因)
- java 解析接口返回xml类型值
- css3 animation和background-position制作动画效果(animation steps)
- Ubuntu 重启apache2未成功,AH00558错误