第一步:理解屏幕分辨率和设计分辨率

通过这个图可以很容易理解,设计分辨率就是你能够进行纹理绘制的大小,而屏幕分辨率就是你的画框大小。而两者之间的适配,通过cocos2dx自带的几种适配方案来进行适配,这里我就简单说明一下:

1—-ResolutionPolicy::EXACT_FIT :拉伸变形,使铺满屏幕

2—-ResolutionPolicy::NO_BORDER :按比例放缩,全屏展示不留黑边

3—-ResolutionPolicy::SHOW_ALL :按比例放缩,全部展示不裁剪

4—-ResolutionPolicy::FIXED_WIDTH :按比例放缩,宽度铺满屏幕

5—-ResolutionPolicy::FIXED_HEIGHT :按比例放缩,高度铺满屏幕

关于一些属性:origin,visiblesize,winsize

首先要知道,我们设计时要关注的就是屏幕设计分辨率。然后再将屏幕设计分辨率对屏幕分辨率进行适配。

origin:即在屏幕中,framesize的原点在designSize的位置,所有的Layer,sprite都是以这个坐标为原点,visiblesize即designsize在framesize的比例下可以看见的区域大小。

glview->setFrameSize(400, 320);
glview->setDesignResolutionSize(800,320, ResolutionPolicy::NO_BORDER); //最后的输出
//winsize :800.000000,320.000000
//origin 200.000000,0.000000
//visiblesize 400.000000,320.000000

如图所示:



(图中origin为200,打错了)

接下来贴出源码:

Vec2 GLView::getVisibleOrigin() const
{
if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
{
return Vec2((_designResolutionSize.width - _screenSize.width/_scaleX)/2,
(_designResolutionSize.height - _screenSize.height/_scaleY)/2);
}
else
{
return Vec2::ZERO;
}
}//这是origin的获取方法,为(设计分辨率-屏幕分辨率/放缩比率)/2
//上图就是 (800-400/1)/2=200 Size GLView::getVisibleSize() const
{
if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
{
return Size(_screenSize.width/_scaleX, _screenSize.height/_scaleY);
}
else
{
return _designResolutionSize;
}
}//这是visiblesize,等于屏幕大小/放缩比例

最新文章

  1. jsp 入门 cookie session
  2. EXCEL 删除重复项并保留最大最小值
  3. linux下查看电脑配置
  4. 工作中遇到的问题--实现CustomerSetting的实时更新
  5. ORACLE SQL 组函数【weber出品必属精品】
  6. UIProgressView-初识IOS
  7. python定制类(以Fib类为例)
  8. Linux:最终用途cat命令查看不可见的字符
  9. Python字符串的encode与decode研究心得——解决乱码问题
  10. 小白浅论JAVA数组中“for加强版”
  11. bootstrap 鼠标悬停显示
  12. 关于java数据库章节connection连接不成功的时候!!!
  13. convert图像格式批量转换
  14. Linux之sort
  15. AM二次开发中选择指定范围内的对象
  16. crm作业知识点集合[一]
  17. 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)
  18. android 的安全问题
  19. Haskell语言学习笔记(30)MonadCont, Cont, ContT
  20. dev控件ASPxComboBox设置ReadOnly="true"后

热门文章

  1. Hudi 数据湖的插入,更新,查询,分析操作示例
  2. vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
  3. Java函数式编程:一、函数式接口,lambda表达式和方法引用
  4. app自动化测试环境安装
  5. 关于 Vue 中 h() 函数的一些东西
  6. LcdTools如何使用PX01进行EDP屏EDID比对及设置显示EDID比对结果
  7. 创建.NET程序Dump的几种姿势
  8. 从小白到架构师(4): Feed 流系统实战
  9. 解决vue中对象属性改变视图不更新的问题
  10. 推荐三个实用的 Go 开发工具