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

之前用的是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,
//added

kCCDeviceiPhone6,
kCCDeviceiPhone6HD,

CCConfiguration.m method -(NSInteger) runningDevice

else if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone )
{
	// From http://stackoverflow.com/a/12535566
	BOOL 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;
        } else
		ret = isiPhone5 ? kCCDeviceiPhone5 : kCCDeviceiPhone;
}
ccTypes.h
//! ccResolutionType
typedef 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值