Cocos2d-x 完美适配iphone、ipad(包括retina模式)

简介: <div style="top: 0px;"></div><span style="font-family:宋体;font-size:14px;"></span><p style="margin: 0cm 0cm 0pt;"><span lang="EN-US" style="color: black; font-family: 宋体; font-size: 12pt; mso-bidi


 

Cocos2d-x 完美适配iphone、ipad(包括retina模式)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!

原文地址http://www.Cocos2dev.com/?p=245

项目中需要同时适配iphoneipad。美术提供的iphone的图是640x960的,ipad的图是768x1024的。发布的时候,项目肯定会分开发布iphone版和ipad版,但是开发过程中,我需要看到ipad上的效果,所以开发过程中不可能分开。

联想到高低清可以用-hd后缀区分,我就想到将所有ipad768x1024图后面全部加-ipad后缀,程序中在ipad上就让它加载-ipad后缀的图。

现在来看看我的实现:(主要模仿的-hd的实现方式)

1、首先宏定义 -ipad

找到libs/Cocos2dx/include/ccConfig.h,加入宏定义代码:

#ifndef CC_IPAD_DISPLAY_FILENAME_SUFFIX

#define CC_IPAD_DISPLAY_FILENAME_SUFFIX  "-ipad"

#endif

 

2、修改底层读取文件的地方,如果是ipad设备就添加后缀-ipad

打开libs/Cocos2dx/platform/ios/CCFileUtils_ios.mm文件

找到下面函数,并做修改

static const char *static_ccRemoveHDSuffixFromFile( const char *pszPath){

#if CC_IS_RETINA_DISPLAY_SUPPORTED

if(cocos2d::CC_CONTENT_SCALE_FACTOR() == 2 ) {

//........

}

//这里添加下面的代码:支持ipad图片 ------开始--------

if( UI_USER_INTERFACE_IDIOM() ==UIUserInterfaceIdiomPad){

NSString *path = [NSString stringWithUTF8String: pszPath];

NSString *name = [path lastPathComponent];

NSString *suffix = [NSString stringWithUTF8String: CC_IPAD_DISPLAY_FILENAME_SUFFIX];

// check if path already has the suffix.

if( [name rangeOfString: suffix].location != NSNotFound ) {

CCLOG("cocos2d: Filename(%@) contains %@ suffix. Removing it. See cocos2d issue #1040", path, CC_RETINA_DISPLAY_FILENAME_SUFFIX);

NSString *newLastname = [name stringByReplacingOccurrencesOfString: suffix withString:@""];

NSString *pathWithoutLastname = [path stringByDeletingLastPathComponent];

return [[pathWithoutLastname stringByAppendingPathComponent:newLastname] UTF8String];

}

}

//支持ipad图片 ------结束--------

#endif // CC_IS_RETINA_DISPLAY_SUPPORTED

};

 

找到下面函数,并修改:

static NSString* getDoubleResolutionImage(NSString* path)

{

#if CC_IS_RETINA_DISPLAY_SUPPORTED

 

if( cocos2d::CC_CONTENT_SCALE_FACTOR() == 2 )

{

//.......

}

//这里添加支持ipad图片。--------开始----------

if( UI_USER_INTERFACE_IDIOM() ==UIUserInterfaceIdiomPad )

{

NSString *pathWithoutExtension = [path stringByDeletingPathExtension];

NSString *name = [pathWithoutExtension lastPathComponent];

NSString *suffix = [NSString stringWithUTF8String: CC_IPAD_DISPLAY_FILENAME_SUFFIX];

// check if path already has the suffix.

if( [name rangeOfString: suffix].location != NSNotFound ) {

CCLOG("cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, CC_RETINA_DISPLAY_FILENAME_SUFFIX);

return path;

}

NSString *extension = [path pathExtension];

if( [extension isEqualToString:@"ccz"] || [extension isEqualToString:@"gz"] )

{

// All ccz / gz files should be in the format filename.xxx.ccz

// so we need to pull off the .xxx part of the extension as well

extension = [NSString stringWithFormat:@"%@.%@", [pathWithoutExtension pathExtension], extension];

pathWithoutExtension = [pathWithoutExtension stringByDeletingPathExtension];

}

NSString *retinaName = [pathWithoutExtension stringByAppendingString: suffix];

retinaName = [retinaName stringByAppendingPathExtension:extension];

NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];

if( [fileManager fileExistsAtPath:retinaName] )

return retinaName;

CCLOG("cocos2d: CCFileUtils: Warning HD file not found: %@", [retinaName lastPathComponent] );

}

//这里添加支持ipad图片。--------结束----------

#endif // CC_IS_RETINA_DISPLAY_SUPPORTED

return path;

}

可能你注意到了,我只是修改了里面的宏定义,所以并不需要写两个函数,跋宏定义拿出来,修改下就可以。我为了不动引擎自己的代码,就在下面写了一份。

 

3、将iOSApplication Target 中的Devices改成Universal

 

4、运行看看,如果你修改的是helloworld工程,那么请将HelloWorld.png复制一份,取名HelloWorld-ipad.png,并将其尺寸改成1024x768。这样iphoneipad都可以运行了。都是全屏幕的哦。

 

5、如果你开启了retina

ipad 的图不用修改。还是1024x768-ipad图。但是iphone的图请用960x640-hd图。(其实只有一套iphone的图的话,加不加-hd都可以的。但尺寸要是960x640的)

 

注:ipad用的是ipad2,没有ipad3,所以ipad3可能尺寸有问题。

 

 

 

 

 

 

 

目录
相关文章
|
22天前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
22天前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
6月前
|
iOS开发
iPad适配
iPad适配
71 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
63 0
|
6月前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
208 0
|
iOS开发
移动端iPhone系列适配问题的一些坑
移动端iPhone系列适配问题的一些坑
99 0
|
iOS开发
IPhone X 以上 ”下巴“ 的适配
IPhone X 以上 ”下巴“ 的适配
254 0
|
Web App开发 网络虚拟化 iOS开发
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
如何获取苹果设备的UDID(iPhone/iPad UDID查询方法)
|
iOS开发
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解】
苹果怎么查看UDID iPhone/iPad查看UDID教程【详解
|
3月前
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现