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

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

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

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

联想到高低清可以用-hd后缀区分,我就想到将所有ipad的768x1024图后面全部加-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、将iOS Application Target 中的Devices改成Universal。

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

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

注:ipad用的是ipad2,没有ipad3,所以ipad3可能尺寸有问题。大家可以试试看。有结果记得留言哦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值