问题描述:

因为游戏刚开始设计时是在Android平台上运行的,所以使用的是当时Android主流的分辨率(800 * 480), 使用cocos2d-x在其他Android平台可以做到等比例缩放,所以Android平台上没有做改动。

但是移植到IOS平台之后,发现了如下问题:

1. 如果设置enableRetinaDisplay(false), 则在iphone4平台上运行的结果是游戏的图片分辨率水平方向和垂直方向都拉伸了两倍。

2. 如果设置enableRetinaDisplay(true), 则在iphone4平台上运行的结果是游戏的图片分辨率为800*480,但是放置的位置的水平方向和垂直方向都拉伸了两倍。

IOS分辨率内幕:

阅读Apple 开发者文档http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreens/SupportingHiResScreens.html#//apple_ref/doc/uid/TP40010156-CH15,知道了问题产生的原因。

1. iOS SDK 4.0 以及以后的SDK支持不同的分辨率,解决方案为将屏幕分为逻辑点和像素。如cocos2d-x中使用getContentSize获得的就是逻辑点的大小,而getContentSizeInPixels获得的就是像素点的大小。在Iphone3 和 Iphone4 中,逻辑点大小是一样的,而像素的分辨率不同。像素点和逻辑点的对应关系为:逻辑点的大小 = 像素大小 / contentScaleFactor。

2. 如果在高分辨率的平台上(如Iphone4),使用非高分辨率的图片资源,且设置contentScaleFactor为1.0,则IOS的Core Animation compositor 会自动拉伸非高分辨率的资源来适配, 使其在非高分辨率和高分辨率设备上的视觉效果是一样的。

3. 如果用户设置contentScaleFactor 为(1.0,2.0]之间的值,系统会使用用户设置的拉伸值。

4. cocos2d-x提供了接口来设置contentScaleFactor, 接口为:CCDirector::setContentScaleFactor。

问题解释:

了解了IOS分辨率的内幕后,再来解释一下问题产生的原因。

问题1: 因为设置enableRetinaDisplay(false),contentScaleFactor为1.0,所以图片会被当成非高清资源,在显示的时候水平和竖直的分辨率都会被拉伸2倍。

问题2:因为设置enableRetinaDisplay(true), contentScaleFactor为2.0,所以图片会显示成原有的像素大小。但是设置位置是使用setPosition,该接口设置的是逻辑位置。因为之前的位置是参考800*480的屏幕大小来设置的,所以当contentScaleFactor为2.0时,就相当于参考屏幕的像素大小为1600*960, 所以精灵的位置等都出现了错误。

解决方案:

为了使程序能够更好的在Android和IOS设备上运行,所以建议采用以下解决方案:

1. 使用相对于屏幕逻辑点分辨率的坐标系。

2. 可以考虑使用单独的配置文件来配置IOS 和Android 上的layout布局,在IOS和Android 上使用不同的配置文件和不同的资源文件。

感谢cocos2d-x张小明的热情帮助。

移植cocos2d-x 游戏从Android平台到IOS平台分辨率问题及解决办法相关推荐

  1. Android点击无响应,Android Studio无响应打不开的解决办法

    最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...

  2. 游戏弹窗程序卸载完重启又出现,探究解决办法中发现与360浏览器有关

    前几天我写了篇博文<流氓软件卸载了又偷偷冒出来,dllhost.exe暗藏安装玄机>,有朋友留言求助,反映游戏弹窗程序卸载之后重启系统又出现,按照我那片博文的方法在注册表.系统服务.计划任 ...

  3. Android studio 实验过程中遇到的问题之android.support.v7.app.AppCompatActivity不能使用的解决办法

    android.support.v7.app.AppCompatActivity不能使用的解决办法 在构建项目时使用 android.support.v7.XX android.support.v4. ...

  4. Android项目clean之后R.java文件丢失解决办法

    2019独角兽企业重金招聘Python工程师标准>>> Android项目clean之后R.java文件丢失解决办法 1.  Android Tools -> fix proj ...

  5. 游戏被攻击了怎么办,有没有什么好的解决办法

    游戏被攻击了怎么办,有没有什么好的解决办法?很多企业现在遇到攻击问题,都会有这样的疑问.现在这个社会的竞争实在太大,防不胜防.那么遇到DDOS攻击问题的时候,我们要怎么去解决这样的问题呢. 很多企业一 ...

  6. android service常驻通知栏,android实现常驻通知栏遇到的问题及解决办法

    实现常驻通知栏时遇到的问题: 无论如何就是不显示通知,查看日志发现貌似报错了: 2020-06-28 14:11:34.923 6387-6387/xxx E/CrashReport: android ...

  7. Android Studio gradle下载依赖包失败的解决办法

    Android Studio gradle下载依赖包失败 的解决办法 使用Android Studio在第一次导入项目或者配置完Kotlin后,会一直Build,因为需要下载一些项目中配置的依赖和gr ...

  8. android studio 无法搜索插件、下载插件解决办法

    android studio 无法搜索插件.下载插件解决办法 解决无法搜索问题 解决无法安装的问题 在 windows 系统上使用 android studio 3.2版本无法搜索下载插件,但是2.3 ...

  9. android设置返回按钮无效,Android onKeyDown监听返回键无效的解决办法

    Android onKeyDown监听返回键无效的解决办法 当我们的Activity继承了TabActivity,在该类中重写onKeyDown是监听不到返回键的, 具体解决方法如下: 重写dispa ...

最新文章

  1. Python dataframe指定列顺序输出 + 列数据转化成字符 + 数据框转化成列表
  2. silverlight 打开html_在Silverlight中嵌入HTML或aspx页面-阿里云开发者社区
  3. 在阿里云Serverless K8S集群上部署Spark任务并连接OSS(详细步骤)
  4. python_装饰器
  5. Android SQLite (一) 数据库简介
  6. java中Date与DateFormat的格式输出
  7. Centos7换yum源
  8. 剑指 Offer II 109. 开密码锁
  9. 易班自动答题脚本_自动答题脚本教程及源码分享(无视分辨率)
  10. python迭代法求极值_4计算函数零点和极值点的迭代法
  11. 监控录像数据恢复方法步骤详解
  12. U3D PDF 旋转中心设置方法
  13. 泰坦尼克号各种因素对存活率的影响
  14. ImageJ对荧光信号离散的细胞计数方法
  15. Linux下为命令取别名
  16. 前端VSCode修改Git远程仓库地址链接
  17. dell服务器显示器接口在哪里,【Dell S2719H 显示器使用总结】安装|接口|边框|背板_摘要频道_什么值得买...
  18. 陪审团(算法竞赛进阶指南)
  19. 金融衍生品PK:期权和权证俩兄弟
  20. android movie 资源释放,Android 资讯类App项目实战 第四章 电影模块

热门文章

  1. 用AkShare获取沪深京A股分钟级K线数据
  2. asp+access
  3. 用python实现阿里云ecs和redis的创建与维护
  4. LaTeX 公式 在线编辑
  5. 主成分分析的概念与发展
  6. Hello,World!向世界问好
  7. HTML5中绘制图形
  8. nodejs菜鸟笔记[不定时更]
  9. 基于ffmpeg的播放器,播放m3u8文件时,seek问题
  10. greendao连接mysql_GreenDao深入