cocos2d增加1136*640图片支持

来源:互联网 发布:知乎网站的优缺点 编辑:程序博客网 时间:2024/06/03 16:01

概述

Cocos2d 通过给文件增加 -hd 后缀来支持 Retina 屏幕。目前 V2.1 Beta2 支持通过给 launch image 增加 -568h 后缀来支持 640×1136 分辨率的 4-Inch 屏幕,但是对于游戏中用到的普通图片还不支持自动加载 -568h 后缀的图片。

我们可以通过修改项目 libs 目录下的 ccType.h, Support/CCFileUtils.h, Support/CCFileUtils.m 几个文件使 Cocos2d 可以自动为 4-Inch 屏幕自动加载 -568h 后缀的图片。

修改过的这几个文件压缩包下载: Cocos2d-fourinch

修改 ccType.h 文件

打开ccType.h, 在 ccResolutionType 中增加 kCCResolutioniPhoneFourInchDisplay 。

//! ccResolutionTypetypedef enum{//! Unknown resolution typekCCResolutionUnknown,#ifdef __CC_PLATFORM_IOS//! iPhone resolution typekCCResolutioniPhone,//! RetinaDisplay resolution typekCCResolutioniPhoneRetinaDisplay,    kCCResolutioniPhoneFourInchDisplay,//! iPad resolution typekCCResolutioniPad,//! iPad Retina Display resolution typekCCResolutioniPadRetinaDisplay,#elif defined(__CC_PLATFORM_MAC)//! Mac resolution typekCCResolutionMac,//! Mac RetinaDisplay resolution typekCCResolutionMacRetinaDisplay,#endif // platform} ccResolutionType;

修改 CCFileUtils.h 文件

  • 在 CCFileUtil.h 中,在 {} 变量声明中增加 NSString *iPhoneFourInchDisplaySuffix_; 作为 4-inch 的后缀
#ifdef __CC_PLATFORM_IOSNSString *iPhoneRetinaDisplaySuffix_;NSString *iPadSuffix_;NSString *iPadRetinaDisplaySuffix_;NSString *iPhoneFourInchDisplaySuffix_;#elif defined(__CC_PLATFORM_MAC)NSString *macSuffix_;NSString *macRetinaDisplaySuffix_;#endif // __CC_PLATFORM_MAC
  • 同时在 CCFileUtils.h 中增加 NSString *iPhoneFourInchDisplaySuffix 的 property 声明:
@property (nonatomic,readwrite, copy, setter = setiPhoneFourInchDisplaySuffix:) NSString *iPhoneFourInchDisplaySuffix;
  • 在 CCFileUtils.h 中增加一个判断给定 4inch 文件是否在方法:
-(BOOL) iPhoneFourInchFileExistsAtPath:(NSString*)filename;

修改 CCFileUtils.m 文件

下面开始修改 CCFileUtils.m 文件:

  • 在第一个 enum 中增加对 4-inch 的支持:
#ifdef __CC_PLATFORM_IOSenum {kCCiPhone,kCCiPhoneRetinaDisplay,kCCiPad,kCCiPadRetinaDisplay,// 4-Inch 支持kCCiPhoneFourInchDisplay,};#elif __CC_PLATFORM_MACenum {kCCMac,kCCMacRetinaDisplay,};#endif
  • 增加对 iPhoneFourInchDisplaySuffix 的 synthesize:
#ifdef __CC_PLATFORM_IOS@synthesize iPhoneRetinaDisplaySuffix = iPhoneRetinaDisplaySuffix_;// 对 iPhoneFourInchDisplaySuffix 的 synthesize@synthesize iPhoneFourInchDisplaySuffix = iPhoneFourInchDisplaySuffix_;@synthesize iPadSuffix = iPadSuffix_;@synthesize iPadRetinaDisplaySuffix = iPadRetinaDisplaySuffix_;#elif defined(__CC_PLATFORM_MAC)@synthesize macSuffix = macSuffix_;@synthesize macRetinaDisplaySuffix = macRetinaDisplaySuffix_;#endif // __CC_PLATFORM_IOS
  • 修改 init 方法,增加对 iPhoneFourInchDisplaySuffix_ 的赋值:
#ifdef __CC_PLATFORM_IOSiPhoneRetinaDisplaySuffix_ = @"-hd";        iPhoneFourInchDisplaySuffix_ = @"-568h";iPadSuffix_ = @"-ipad";iPadRetinaDisplaySuffix_ = @"-ipadhd";#elif defined(__CC_PLATFORM_MAC)macRetinaDisplaySuffix_ = @"-machd";macSuffix_ = @"-mac";#endif // __CC_PLATFORM_IOS
  • 在 dealloc 中 release iPhoneFourInchDisplaySuffix_:
#ifdef __CC_PLATFORM_IOS[iPhoneRetinaDisplaySuffix_ release];    [iPhoneFourInchDisplaySuffix_ release];    [iPadSuffix_ release];[iPadRetinaDisplaySuffix_ release];#elif defined(__CC_PLATFORM_MAC)[macRetinaDisplaySuffix_ release];[macSuffix_ release];#endif // __CC_PLATFORM_MAC
  • 修改 -(NSString*) fullPathFromRelativePath:(NSString*)relPath resolutionType:(ccResolutionType*)resolutionType 方法增加对 4-inch 的支持:
...// iPhone HD ?if( device == kCCiPhoneRetinaDisplay || (enableFallbackSuffixes_ && !ret) ) {ret = [self getPath:relPath forSuffix:iPhoneRetinaDisplaySuffix_];*resolutionType = kCCResolutioniPhoneRetinaDisplay;}// 4 Inch iPhone HD ?if( device == kCCiPhoneFourInchDisplay || (enableFallbackSuffixes_ && !ret) ) {ret = [self getPath:relPath forSuffix:iPhoneFourInchDisplaySuffix_];*resolutionType = kCCResolutioniPhoneFourInchDisplay;}// If it is not Phone HD, or if the previous "getPath" failed, then use iPhone images.if( device == kCCiPhone || !ret ){ret = [self getPath:relPath forSuffix:@""];*resolutionType = kCCResolutioniPhone;}...
  • 修改 -(NSInteger) runningDevice 方法,增加对 4-inch iPhone 的判断:如果高度为568则认为是 4-inch iPhone 或 iPod Touch 5 代:
...else{        if ([[UIScreen mainScreen] bounds].size.height == 568) {            ret = kCCiPhoneFourInchDisplay;        }else if( CC_CONTENT_SCALE_FACTOR() == 2 )ret = kCCiPhoneRetinaDisplay;elseret = kCCiPhone;}...
  • 修改 -(NSString*) removeSuffixFromFile:(NSString*) path 方法,增加对 kCCiPhoneFourInchDisplay 的支持:
...if( device == kCCiPhoneRetinaDisplay || (enableFallbackSuffixes_ && !ret) )ret = [self removeSuffix:iPhoneRetinaDisplaySuffix_ fromPath:path];if( device == kCCiPhoneFourInchDisplay || (enableFallbackSuffixes_ && !ret) )ret = [self removeSuffix:iPhoneFourInchDisplaySuffix_ fromPath:path];if( device == kCCiPhone || !ret )ret = path;...
  • 最后,实现 -(BOOL) iPhoneFourInchFileExistsAtPath:(NSString*)path 方法
-(BOOL) iPhoneFourInchFileExistsAtPath:(NSString*)path{return [self fileExistsAtPath:path withSuffix:iPhoneFourInchDisplaySuffix_];}

修改过的这几个文件压缩包下载: Cocos2d-fourinch