[转]在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

目录
相关文章
|
12天前
|
编解码 测试技术 开发工具
测试 iPhone 应用在不同屏幕尺寸和分辨率下的响应式效果
【10月更文挑战第23天】测试 iPhone 应用在不同屏幕尺寸和分辨率下的响应式效果是确保应用质量和用户体验的重要环节。通过手动测试、自动化测试、视觉效果评估、性能测试、用户体验测试等多种方法的综合运用,能够全面地发现应用在响应式效果方面存在的问题,并及时进行解决和优化。同时,持续的测试和优化也是不断提升应用质量和用户满意度的关键。
|
12天前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
12天前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
6月前
|
iOS开发
iPad适配
iPad适配
66 0
|
6月前
|
移动开发 网络协议 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
62 0
|
6月前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
187 0
|
iOS开发
移动端iPhone系列适配问题的一些坑
移动端iPhone系列适配问题的一些坑
97 0
|
iOS开发
IPhone X 以上 ”下巴“ 的适配
IPhone X 以上 ”下巴“ 的适配
253 0
|
Web App开发 网络虚拟化 iOS开发
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
|
iOS开发
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解