ios老游戏更新 cocos2d-iphone 注意事项

来源:互联网 发布:怎么样制作app软件 编辑:程序博客网 时间:2024/05/06 04:14

之前用的是cocos2d-iphone 1.0.1, 现在为了升级x64不得不更新老引擎倒v2

支持x64的v2引擎:

http://forum.cocos2d-swift.org/t/cocos2d-iphone-2-1-64-bit-fix/15919

下载地址:

https://github.com/cocos2d/cocos2d-iphone-classic

http://www.cocos2d-swift.org/download (2.2)


变化挺大, 不过至少语法上是一致的, 只是director和contianer变化很大;

.IPAD资源适配

ipad可以用iphone的资源: (即ipadhd可以用-hd后缀的图片)

if (Ipad) {[[CCFileUtils sharedFileUtils] setiPadSuffix:@""];[[CCFileUtils sharedFileUtils] setiPadRetinaDisplaySuffix:@"-hd"];}


.CCAction

修正了一些动作CCAction堆叠的问题, v1代码是包容的, 所以一直没有出错, v2必须逻辑上正确对待了


.appDelegate

v2最大的亮点是摒弃了RootViewControllerHD和GameConfig这两个看似有用, 实际鸡肋的文件

CCGLView略有修改, viewcontroller直接使用了UINavigationController, 貌似UIViewController也一样, CCDirector也有少许微调, 这些在Demo里面都可以很方面看到, 因为v2简化的已经很精简了


.AD

为了让iad和admob正确显示, 需要建个子UIViewController柄

rootForOthers=[[UIViewController alloc]init];[[director view]addSubview:[rootForOthers view]];


.隐藏状态栏

因为已经脱离了RootViewControllerHD, 所以隐藏状态栏也相对简单, 在info.plist里面增加 "View controller-based status bar appearance" 值为 "NO" 就好了


.Menu

CCMenu.isTouchEnabled 变为了 CCMenu.enabled (setter)


.Layer

CCLayer.isTouchEnabled 变为 CClayer.touchEnabled  (setter)

我倒是觉得is很方便呼出


.对iPhone6 和 iPhone6 Plus的支持

.因为cocos2d-iphone v2.2还是不支持新的iphone6和6plus设备, 不过可以通过手动修改来添加, 修改的地方很多, 但是复杂度并不高

方法转自这里:

http://forum.cocos2d-swift.org/t/iphone-6-and-6-update-patch-for-cocos2d-2-1/15213/5

CCConfiguration.h

enum {kCCDeviceiPhone,kCCDeviceiPhoneRetinaDisplay,kCCDeviceiPhone5,kCCDeviceiPhone5RetinaDisplay,//addedkCCDeviceiPhone6,kCCDeviceiPhone6HD,

CCConfiguration.m method -(NSInteger) runningDevice

else if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ){// From http://stackoverflow.com/a/12535566BOOL isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));BOOL isiPhone6 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(750, 1334));if( CC_CONTENT_SCALE_FACTOR() == 2 ) {        ret = isiPhone6 ? kCCDeviceiPhone6 : isiPhone5 ? kCCDeviceiPhone5RetinaDisplay : kCCDeviceiPhoneRetinaDisplay;} else        if( CC_CONTENT_SCALE_FACTOR() == 3 ) {            ret = kCCDeviceiPhone6HD;        } elseret = isiPhone5 ? kCCDeviceiPhone5 : kCCDeviceiPhone;}
ccTypes.h
//! ccResolutionTypetypedef enum{ //added        //! iPhone 6    kCCResolutioniPhone6,    //! iPhone 6+    kCCResolutioniPhone6HD,
CCDirectorIOS.m
-(BOOL) enableRetinaDisplay:(BOOL)enabled{// Already enabled ?if( enabled && (__ccContentScaleFactor == 2 || __ccContentScaleFactor == 3) )return YES;
float newScale = enabled ? [[UIScreen mainScreen] scale] : 1;
CCFileUtils.h added methods
-(void) setiPhone6Suffix:(NSString *)suffix;-(void) setiPhone6HDSuffix:(NSString *)suffix;

CCFileUtils.m

added in the top

NSString *kCCFileUtilsiPhone6 = @"iphone6";NSString *kCCFileUtilsiPhone6HD = @"iphone6hd";
added into _suffixesDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
@"-iphone6", kCCFileUtilsiPhone6,@"-iphone6hd", kCCFileUtilsiPhone6HD,
Method - (void) buildSearchResolutionsOrder
added right before line else if (device == kCCDeviceiPhoneRetinaDisplay)

else if (device == kCCDeviceiPhone6){    [_searchResolutionsOrder addObject:kCCFileUtilsiPhone6];    [_searchResolutionsOrder addObject:kCCFileUtilsiPhone5];    [_searchResolutionsOrder addObject:kCCFileUtilsiPhoneHD];}else if (device == kCCDeviceiPhone6HD){    [_searchResolutionsOrder addObject:kCCFileUtilsiPhone6HD];    [_searchResolutionsOrder addObject:kCCFileUtilsiPadHD];}
Method -(ccResolutionType) resolutionTypeForKey:(NSString*)k inDictionary:dictionary
added

if( [key isEqualToString:kCCFileUtilsiPhone6] )        return kCCResolutioniPhone6;    if( [key isEqualToString:kCCFileUtilsiPhone6HD] )        return kCCResolutioniPhone6HD;
Added 2 method to this class:
-(void) setiPhone6Suffix:(NSString *)suffix{    [_suffixesDict setObject:suffix forKey:kCCFileUtilsiPhone6];}-(void) setiPhone6HDSuffix:(NSString *)suffix{    [_suffixesDict setObject:suffix forKey:kCCFileUtilsiPhone6HD];}
AppDelegate.m
[sharedFileUtils setEnableFallbackSuffixes:YES];[sharedFileUtils setiPhone6Suffix:@"-iphone6"]; //Default -iphone6[sharedFileUtils setiPhone6HDSuffix:@"-ipadhd"]; //Default -iphone6hd


因为并没有涉及到横版游戏, 暂时没有研究如何实现


0 0
原创粉丝点击