热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Cocos2dx的多分辨率解决方案

Cocos2d-x的多分辨率解决方案cocos2d-x作为一个跨平台的2D游戏引擎,确实是一个相当不错的2D游戏的跨平台解决方案,不但上手容易ÿ

Cocos2d-x的多分辨率解决方案

cocos2d-x作为一个跨平台的2D游戏引擎,确实是一个相当不错的2D游戏的跨平台解决方案,不但上手容易,而且性能和兼容性也表现不俗,不过目前还存在一些不足的地方,因为引擎本身尚处在一个发展和成熟的过程中,比如UI的制作流程还很不成熟且有着诸多限制,再比如就是跨平台的多分辨率没有一个明确而清晰的流程。

我们目前的项目中采用了一套解决思路在目前cocos2d-x v2.0.1版本上适用,事实上最近的版本v2.0.2已经对多分辨率进行了改进,不过仍然需要开发者对最终的方案进行思考,有趣的是这方面引擎的升级与我们在v2.0.1上做的许多工作不默而合,所以在我看来我们目前的算是一个比较合理的解决方案。分享出来也许可以帮助到需要的朋友们。

首先我们需要来看一下我们所面对的情况:

分辨率

androidresolution我们可以明确知道的是iPhone的分辨率是480×320,而Retina的分辨率则是标准的iPhone的2倍—960×640,Android的情况则相当复杂,从800×480、854×480到1280×800,各种机型,各种分辨率。

在cocos2d-x中,我们需要谨记的是,面对iPhone版本,引擎没有提供一个可以实现统一缩放的接口,而无论是否Retina,在游戏内逻辑的分辨率都是480×320,即使我们打开了Retina模式,游戏代码中对坐标的访问也是一致的,区别是在我们需要为Retina提供一套更高分辨率的资源。而Android版本因为分辨率的不统一,所以引擎是提供了整体缩放的接口。

但最终游戏应该设计为有一个基准分辨率的,所以我们有两种办法,一种是以Android为设计基准,我们在主流的Android分辨率中选择一个比如800×480,然后拉伸到Android其他的分辨率上,但问题在于iOS的分辨率是固定的,而且在cocos2d-x的iOS版中没有整体缩放的接口可以直接调用,所以我们也许需要为iOS单独提供一套资源并在代码里对坐标进行调整,这么做,显然是有些得不偿失的,所以既然iOS的分辨率是固定的,不如我们选择第二种办法,以iOS的分辨率为游戏的设计基准,这也是引擎作者给出的建议,以480×320为基准设计分辨率,拉伸到Android版,然后为Retina单独制作一套以-hd结尾的高清资源。

这样的话制作流程非常清晰而且统一,但存在一点不足的是目前Android的主流机器已经多是较高分辨率的,如果用480×320的资源来拉伸效果必然不如人意,为了这一点,我们目前的解决方法是对引擎做了一点小修改,让系统的资源默认是高清的,非Retina的资源改为使用-sd结尾,这样游戏的设计分辨率改为960×640,如此再拉伸到Android上效果会好很多,并且代码和制作流程依然可以保持统一,唯一需要注意的是iOS上的逻辑坐标依然是480×320,所以需要代码里对绝对的坐标值做一点处理(Android和iOS是除2的关系),宏是一个不错的办法,但是需要组里的程序员编写UI时为此额外付出一点精力。

比例

不同的屏幕比例是我们需要面对的另一个难题,之前iOS的比例是统一的,3:2,但是现在iPhone5诞生了,16:9的改变把iOS变的和Android一样需要面对比例问题的解决上了。

比例问题的解决基本上有三种,我们修改了一点点代码实现了,不过现在最新的v2.0.2已经实现了这三种方法:

     第一是黑边,游戏始终保持设计时的比例,对于不同比例的设备,通过加入黑边来解决,可以接受但显然不是最好的。
     第二是拉伸,无视比例差异,拉伸充满屏幕,虽然可以保证全屏显示,但是整个游戏的比例则会失调。
     第三则是裁减,更类似与电视信号对于16:9到4:3的处理,4:3的画面部分是安全区域,所有重要的信息都会在这个范围内,而两边则是为了提供更大的视野。

如果把长和高的比值作为考量的话,那么市面上主流设备的比例从3:2到16:9的比值范围大概是是从1.5到1.778,想让游戏完美的显示在这些机器上,我们的办法是使用安全框也就是上面提到的第三种裁减的办法。

safeframe

安全框的概念很好理解,游戏支持的屏幕比例从16:9到3:2(当然你可以支持更大的变化比例),而所有重要的游戏内容当将位于3:2的部分,对于16:9扩展开来的屏幕区域主要用来放背景图或者让地图具有更宽广的视野,上图是我们游戏中的一个简易的UI设计稿,很好理解,另外对于一些应当根据屏幕的不同而变更位置比如需要左右对齐的内容,我们也可以通过一些简单的代码来实现的。

因为iPhone5的发售,实际上我们目前的基准分辨率已经由原先的960×640变为了1136×640了,不过因为我们对于比例的解决方案同样适用,所以实际上除了制作ccbi文件时需要额外注意之外,并不需要修改任何代码。

资源

iPhone对于非Retina的设备需要我们提供一套低分辨率的资源,但实际上在非Retina的设备上正确显示Retina的资源也不是一件麻烦事,之所以需要另一套资源更多的考量还是在内存上,所以其实不仅仅是iOS,在Android上对于比较古老的、屏幕尺寸和内存都很小的设备上也是应该考虑使用小尺寸贴图的,除非游戏本身就不打算支持老设备,否则多准备一套资源还是很有必要的。


推荐阅读
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
雪_月_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有