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



 

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

 

 

 

 

 

 

 

时间: 2024-08-18 02:42:15

Cocos2d-x 完美适配iphone、ipad(包括retina模式)的相关文章

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

《深入浅出iPhone/iPad开发(第2版)》——Xcode是你的iOS项目的枢纽

Xcode是你的iOS项目的枢纽 深入浅出iPhone/iPad开发(第2版) 当Xcode打开你新建的基于视图的项目时,你会看到所有构成这个项目的文件,但是我们改变了一点点.通过展开项目,并选择一个.xib文件(请在查看时多花点时间),GUI编辑器会在左边打开.要打开侧端的辅助视图,点击编辑器右上的铺助编辑器按钮. 我们将使用一些SDK中的其他工具(尤其是模拟器),但是它们都用于处理这里所包含的文件. 显示的文件和框架有悖于我们这个基于视图的应用程序的选择.让我们继续向前,我们将使用不同类型的

91助手完美适配iOS7.1.1完美越狱

近日,国内黑客团队盘古,宣布实现iOS7.1.1版本的完美越狱,此次是国内大神真正意义上实现越狱,让我们感现盘古大神三年来的努力.在完美越狱发布的第一时间,91助手已经实现对iOS7.1.1越狱的完美适配. 此次,完美越狱的发布吸引部分用户iOS7.0的越狱用户升级至iOS7.1.1.91助手为服务这一部分用户,第一时间实现了功能完美适配iOS7.1.1越狱环境.包含软件安装.音乐下载.图片下载.文件管理.一键备份等所有功能均可正常使用,已越狱的用户可以放心使用91助手越狱版的全部功能! iOS

Camera360完美适配iOS8 苹果商店强力推荐

期待已久的iOS8系统终于在9月17日开始全球推送了,国内已经有不少的朋友升级了系统http://www.aliyun.com/zixun/aggregation/21263.html">第一时间体验了更具拓展性和自主性的iOS8啦!热门手机摄影应用Camera360率先完美适配iOS8,并且一上架就获得了中国大陆(包括首页和iOS专页),香港,澳门,澳门,泰国,越南,马来西亚,菲律宾,新加坡,美国,巴西,印度等十多个国家和区域推荐的好成绩,可见Camera360搭配iOS8系统必将带给人

《深入浅出iPhone/iPad开发(第2版)》——替换按键的文本

替换按键的文本深入浅出iPhone/iPad开发(第2版)你知道,按键需要一个IBAction去响应按键按下,因此,我们在实现文件中编写按键应该怎么做.但是按键应该怎么做呢? 我们需要去替换按键中的文本来提供一个答案.因此,这意味着我们需要一些方式达到返回"out"到界面,并改变标签的文本.我们将使用一个IBOutlet来实现. IBActions和IBOutlets是对理解如何使用控件来工作的关键,我们将在下一章中对它们进行细致的讨论.目前,只要记住动作用于在界面中对事件做出反应,出

让你的应用支持新iPad的Retina显示屏

上周起大家伙纷纷开始上手第三代iPad了.由于新iPad采用了Retina显示屏,分辨率较上一代iPad增加了一倍(译者:长宽增加一倍,像素是上一代的四倍).为了支持新增的这些个像素,iOS开发者需要考虑升级自己的iPad应用,我在下文列举了一些必须注意的事项. 一.应用图片 标准iOS控件里的图片资源,苹果已经做了相应的升级,我们需要操心的是应用自己的图片资源.就像当初为了支持iPhone 4而制作的@2x高分辨率版本(译者:以下简称高分)图片一样,我们要为iPad应用中的图片制作对应的高分版

《深入浅出iPhone/iPad开发(第2版)》——你的iOS工具箱

你的iOS工具箱深入浅出iPhone/iPad开发(第2版)第1章已经被你征服,现在你已经添加了基本的iOS应用程序交互到你的工具箱中. 视图是在界面构建器中创建的. 一个视图是由nib(.xib)文件组成的,而GUI则在界面构建器中被编辑的.* 然后,你编写代码使视图运行-- 这类代码几乎总是使用Xcode用Objective-C语言编写的,而且其中包括IBActions和IBOutlets. 连接组件事件到代码. 回到界面构建器,连接你的动作和出口到视图中包含的组件. 模拟器运行你的应用程序

iPhone/iPad/iTouch 突然蓝屏重启解决办法

出现蓝屏重启死机问题我们只要刷机了,刷机的方法也简单我们先在苹果官方下载ios8.1或其它版本的固件系统电脑中,然后我们再通过itunes工具来进行刷机升级了,操作步骤如下 1.根据机型下载好上面所对应的固件版本. 2. 将iPhone \ iPad \ iTouch 与iTunes 然后再打开itunes工具了,之后我们再按住键盘上Shift(上档键)+鼠标左键点击iTunes 的更新 \ 恢复功能. 3.现在我们要选择文件了,同时按下Shift(上档键)+鼠标左键点击iTunes 的更新 \

iOS版微信6.5.21发布 适配iPhone X

昨日,iOS版微信迎来v6.5.21正式版发布,本次升级主要适配iPhone X,在聊天中查找聊天内容时,可以查找交易消息.可以给聊天中的消息设置日期提醒.上一个正式版v6.5.16发布于9月13日,时隔51天又迎来了更新. 微信近期版本收藏笔记可以添加项目符号,可以在聊天中置顶.可以生成自己的赞赏码,接受打赏.优化搜索聊天记录的体验. 优化了对 iPad 的适配,增加分栏布局. 微信6.5.21 for iOS正式版更新 - 适配 iPhone X - 在微信聊天中查找聊天内容时,可以查找交易