[转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率

简介:

原理:将iphone的hd图片给ipad用,即:

  • 使用原iphone版HD资源(960*640),不用适配到1024*768,四周可留黑边
  • 不改动原有逻辑代码

 

经测试,这个适配方法可以让一份代码同时运行与iphone、iphone retina、ipad、ipad retina四种分辨率。

 

 

1.让ipad能够读入HD图片

在cocos2d-x源代码CCFileUtils_ios.mm中,将所有

cocos2d::CC_CONTENT_SCALE_FACTOR() == 2

改成

cocos2d::CC_CONTENT_SCALE_FACTOR() == 2 || (UI_USER_INTERFACE_IDIOM() ==UIUserInterfaceIdiomPad 

 

2.让ipad显示640*960游戏区域,并居中

在iOS/AppController.mm中,将

EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]

                               pixelFormat: kEAGLColorFormatRGBA8

                               depthFormat: GL_DEPTH_COMPONENT16_OES

                        preserveBackbuffer: NO

                                sharegroup: nil

                             multiSampling: NO

                           numberOfSamples: 0 ];

改成(此处为竖屏分辨率,横屏调换可x,y坐标):

    EAGLView *__glView = nil;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        __glView = [EAGLView viewWithFrame: CGRectMake(0, 0, 320, 480)

                               pixelFormat: kEAGLColorFormatRGBA8

                               depthFormat: GL_DEPTH_COMPONENT16_OES

                        preserveBackbuffer: NO

                                sharegroup: nil

                             multiSampling: NO

                           numberOfSamples: 0 ];

        __glView.transform = CGAffineTransformMakeScale(1.0, 1.0);

        __glView.frame = CGRectMake((768-640)/2,(1024-960)/2, 640,960);//屏幕窗口

    }

    else {

        __glView = [EAGLView viewWithFrame: [window bounds]

                               pixelFormat: kEAGLColorFormatRGBA8

                               depthFormat: GL_DEPTH_COMPONENT16_OES

                        preserveBackbuffer: NO

                                sharegroup: nil

                             multiSampling: NO

                           numberOfSamples: 0 ];

    }

 

3.开启Retina分辨率

classes/AppDelegate中:

pDirector->enableRetinaDisplay(true);

 

4.坐标调整 某些情况下坐标坐标会扩展到640,960 所以需要用百分比的形式表示坐标

int screenWidth=CCDirector::sharedDirector()->getWinSize().width;

int screenHeitht=CCDirector::sharedDirector()->getWinSize().height;

 

如果原来有用坐标跟常数运算,比如ccp(x+常数,y-常数)这一类,常数要变换一下

坐标常数=坐标常数* screenWidth/320;

 

 

5.以上步骤完成后,可以在iphone、iphone retina、ipad上正常运行,但不能在ipad retina上运行,要在pad retina运行,需要在源代码CCEGLView_ios.mm加入以下代码,

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) return false;

bool CCEGLView::canSetContentScaleFactor()

    {

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) return false;

        return [[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]

        && [[UIScreen mainScreen] scale] != 1.0;

    }

 

 

6.将程序设置为universal形式

Build Settings->Deployment->Targeted Device Family设置成iphone/ipad

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/p/3599211.html

目录
相关文章
|
2月前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
33 0
|
2月前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
27 0
|
Web App开发 网络虚拟化 iOS开发
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
|
iOS开发
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解
|
iOS开发
苹果怎么查看 UDID iPhone/iPad 查看 UDID 教程【详解】
在开发 iPhone 和 iPad 软件的时候,要使用 UDID 来做真机测试,那么如何查看 iPhone 或者 iPad 的 UDID 呢?下面介绍三种最简单的查看 UDID 的方法,供大家参考!下面就详情来看看。
|
存储 算法 C++
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
|
iOS开发
iPhone和ipad去掉按钮默认样式
1.手机端web开发,遇到一下问题: 按钮应该是红色的背景,结果上面有一层白色的蒙层。 去掉所有自定义样式发现:白色的蒙层是button自带的样式,在iPhone和ipad上面没有去掉
86 0
|
iOS开发
iPhone与iPad的屏幕支持方向
iPhone与iPad的屏幕支持方向
151 0
iPhone与iPad的屏幕支持方向
|
机器学习/深度学习 传感器 自然语言处理
没有新款iPhone!苹果发布最强5nm芯片,性能提升4成,造就史上最快iPad
没有新款iPhone!苹果发布最强5nm芯片,性能提升4成,造就史上最快iPad
176 0
iPhone销量低迷,或导致苹果放弃自动驾驶项目?
这可能意味着,由于iPhone市场需求低迷,苹果不得不削减非核心计划的开支。
425 0