之前用的是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
因为并没有涉及到横版游戏, 暂时没有研究如何实现