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

通过这个图可以很容易理解,设计分辨率就是你能够进行纹理绘制的大小,而屏幕分辨率就是你的画框大小。而两者之间的适配,通过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,等于屏幕大小/放缩比例

[cocos2d-x]关于屏幕适配的更多相关文章

  1. Cocos2d-JS的屏幕适配方案

    Cocos2d引擎为游戏开发者提供了屏幕适配策略(Resolution Policy)解决方案. 使用方式 1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolut ...

  2. 关于Unity中的屏幕适配

    一.Game视图的屏幕分辨率可以先自定义添加,供以后选择,以下是手游经常用到的分辨率: 1.1136X640,iPhone5 2.1920X1080,横屏,主流游戏都是这个分辨率 3.1080X192 ...

  3. Android屏幕适配笔记

    1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...

  4. iOS开发点滴:iPhone屏幕适配

    最近开始做iOS开发,遇到一些小问题和解决方法,记录下.   今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...

  5. IOS开发之绝对布局和相对布局(屏幕适配)

    之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下 ...

  6. JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案

    1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolution Policy,只需要在游戏载入过程完成之后(cc.game.onStart函数回调中),调用下面的代 ...

  7. 【iOS】屏幕适配之NSLayoutConstraint

    前言 如何实现一张图片在iPhone和iPad上显示不同的尺寸,我了解到一般有三种办法:直接手写代码动态添加约束:把NSLayoutConstraint关联到ViewController里再viewD ...

  8. Android 屏幕适配

    前言 手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下 单位理解 首先让我们先来看看关于手机所用到的单位 真实物理尺寸单位: mm:表示毫米,是屏幕的物理尺寸. in:表示英寸,是屏 ...

  9. 了解真实的『REM』手机屏幕适配

    rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...

  10. Android屏幕适配全攻略 (转载)

    http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...

随机推荐

  1. 3.MongoDB系列之查询

    1. find简介 // 查询所有文档 db.users.find({}) // 查询指定条件文档 db.users.find({'name': 'shenjian'}) // 查询指定字段,1查询键 ...

  2. __g is not defined

    新手小白学习小程序开发遇到的问题以及解决方法 文章目录 1.出现的问题 2.解决的方法 1.出现的问题 2.解决的方法 删除app.json中的 "lazyCodeLoading" ...

  3. SpringBoot 解决跨域问题代码

    package com.example.demo.gs; import org.springframework.context.annotation.Configuration; import jav ...

  4. 本人常用的sed命令用法

    如果使用sed命令修改文件,需要为sed命令指定[-i]选项(i,insert表示插入指令),下面是本人常用到的几种场景: 1. 在文件最后一行的下一行添加配置 如:在配置文件/etc/profile ...

  5. 带你了解NLP的词嵌入

    摘要:今天带领大家学习自然语言处理中的词嵌入的内容. 本文分享自华为云社区<[MindSpore易点通]深度学习系列-词嵌入>,作者:Skytier. 1 特征表示 在自然语言处理中,有一 ...

  6. git ignore忽略规则

    目录 Git 忽略文件提交的方法 Git 忽略规则 Git 忽略规则优先级 Git 忽略规则匹配语法 常用匹配示例 多级目录忽略规则设置 .gitignore规则不生效 参考文章 Git 忽略文件提交 ...

  7. 《Design by Contract for Embedded Software》 翻译

    原文: Design by Contract for Embedded Software (state-machine.com) Design by Contract is the single mo ...

  8. mysql删库报错

    3.开发人员测试环境删库报错 #解决:在数据库的物理目录中(mysql的data目录),进入要删除的数据库目录,查看是否有文件存在,若存在,使用rm -rf 命令清除:再次执行删除数据库命令即可 [r ...

  9. SpringBoot yml配置文件中,logging.level报错

    报错 *************************** APPLICATION FAILED TO START *************************** Description: ...

  10. Pairs of Numbers 辗转相除

    # 42. Pairs of Numbershttps://blog.csdn.net/qq_43521140/article/details/107853492- 出题人:OJ- 标签:[" ...