`

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

阅读更多

 

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、将iOS Application 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可能尺寸有问题。

 

 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    cocos2d-x项目快速适配IPAD

    【cocos2d-x项目快速适配iPad】的策略主要涉及到如何使原本为iPhone设计的游戏在iPad上正常运行,同时尽量减少代码改动。cocos2d-x作为一个流行的2D游戏开发框架,在处理不同设备分辨率时,需要进行适配工作以确保...

    cocos2d入门cocos2d入门

    本篇文章将带你入门cocos2d,讲解环境搭建、基本概念以及如何进行触控输入和适配Retina显示。 **环境搭建** 1. **系统需求**:首先,你需要一台运行Mac OS X Lion操作系统的电脑,以及XCode 4.1或更高版本。XCode...

    千锋学院-欧阳老师iOS培训视频-UI第一季2013年10月发布【分辨率1280×720】

    1. **iOS设计基础**:介绍iOS平台的设计理念和原则,包括Apple的Human Interface Guidelines(HIG),以及如何适应不同尺寸的屏幕,如iPhone和iPad。 2. **用户界面元素**:讲解各种iOS界面元素的使用,如按钮、...

    如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    - **Retina Display与Cocos2d:** Cocos2d同样遵循类似的逻辑,但开发者需手动为Retina Display设备提供高分辨率的图像资源。这通常是通过在资源文件名后添加“@2x”后缀实现的,如“mole@2x.png”。Cocos2d会在运行...

    cocos2d入门ppt

    cocos2d for iPhone 是cocos2d的一个分支,专为苹果的iOS操作系统设计,允许开发者创建高质量的2D游戏,而且完全免费。 【环境搭建】 在开始cocos2d开发之前,首先需要配置好开发环境。对于Mac OS X Lion系统,...

    适配iphone5打飞机源码

    《适配iPhone 5“打飞机”游戏源码解析》 在移动游戏开发领域,"打飞机"是一款经典的休闲游戏,其简洁的操作和刺激的体验深受玩家喜爱。本篇文章将详细解析一款专为iPhone 5适配的"打飞机"游戏源码,该源码基于...

    Icons 无需注册

    这些图标尺寸通常包括:1024x1024(App Store)、83.5x83.5@2x(iPhone X系列主屏幕)、120x120@2x(iPhone 6/7/8的主屏幕)、180x180@3x(iPhone 6/7/8 Plus和iPhone X系列的主屏幕)、76x76@2x(iPad的主屏幕)、...

Global site tag (gtag.js) - Google Analytics