您的位置:首页 > 移动开发 > Cocos引擎

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

2015-01-01 14:43 274 查看
之前用的是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


因为并没有涉及到横版游戏, 暂时没有研究如何实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐