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

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

概述   Cocos2d-x 完美适配iphone、ipad(包括retina模式) 猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢! 原文地址: http://www.Cocos2dev.com/?p=245 项目中需要同时适配iphone和ipad。美术提供的iphone的图是640x960的,ipad的图是768x1024的。发布的时候,项目 

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_SUPPORTEDif(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 wellextension = [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_SUPPORTEDreturn 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可能尺寸有问题。

总结

以上是内存溢出为你收集整理的Cocos2d-x 完美适配iphone、ipad(包括retina模式)全部内容,希望文章能够帮你解决Cocos2d-x 完美适配iphone、ipad(包括retina模式)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1068512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存