转载自:
我已经关注cocos2d小组一段时间了,他们最近的发布版本支持在Mac OS X系统上创建项目。也许是为即将上线的Mac App Store作准备,cocos2d团队正在努力使得从iPhone/iPad到Mac OS X上程序的移植更简单。
目前似乎并不能100%地支持Mac OS X系统,但是基础功能可以实现。你或许比较关心如何使自己iPhone上的项目转而支持Mac OS X,实话说我没找到简单的方法,因此倘若有人可以站出来帮我的话,我非常感激。但是这篇教程的目的将是创建一个新的应用程序。
下面让我们回顾一下为完成这个任务而需要的步骤。
这里可以下载最新的。完成下载之后,解压到Mac上的文件夹中。
- 创建新的Cocoa工程。
- 将Cocos2d资源添加到项目中
- 编辑AppDelegate.h 和AppDelegate.m文件
- 引入架构
- 创建新的Objective-C的类
- 为MainMenu.xib更改Interface Builder中的设置
- 引入样例文件
我还得说这不一定是在OS X上创建使用Cocos2d的项目的最好的或唯一的方式,有一些步骤可能是多余的或者是不对的。下面只是我采取的步骤,如果你们有更好的建议来使这篇教程更完善,请放心的告诉我。
创建新的Cocoa工程
首先我们需要打开Xcode之后开始新的项目。然而这一次,我们将用在Mac OS X->Application下的Cocoa Application模板而不是预定义的cocos2d模板。下面是屏幕截图:
一旦你创建了新的项目,你会看到Xcode界面出现。这篇教程中我的程序命名为Demo Mac Port。你的屏幕跟下面的截图看起来应该差不多。
在下一步将要添加cocos2d资源到项目中,确定你已经下载了支持Mac OS X的最新的cocos2d的版本。
将Cocos2d资源添加到项目中
这一步你需要cocos2d文件,如果你还没有下载,那么你可以在这里下载。下载后解压到你的硬盘上。
解压缩之后,打开cocos2d-iphone-0.99.5-beta3文件夹找到cocos2d文件夹。屏幕截图如下:
这个文件夹需要添加到工程中。我通常把它直接从文件查找窗口拖拽到工程中。只需拖拽到在程序名下工程中,与下面截图类似的一个对话框就会出现:
之后你的Xcode工程界面跟下面看起来相似:
下一个环节将引导你修改AppDelegate.h 和AppDelegate.m文件。
编辑AppDelegate.h 和AppDelegate.m文件
这一部分你会修改这两个文件使它们与Cocos2d相兼容。我在这里不会解释代码但是详细的代码我粘贴在下面:
AppDelegate.h
1234567891011121314151617181920212223 | #import "cocos2d.h" @class CCSprite; //CLASS INTERFACE#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED@interface AppController : NSObject{ UIWindow *window;}@end #elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED)@interface Demo_Mac_PortAppDelegate : NSObject { NSWindow *window_; MacGLView *glView_;} @property (assign) IBOutlet NSWindow *window;@property (assign) IBOutlet MacGLView *glView; @end#endif // Mac |
AppDelegate.m
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | // 动作演示// a cocos2d example// http://www.cocos2d-iphone.org// //本地引入#import "cocos2d.h"#import "Demo_Mac_PortAppDelegate.h"#import "DemoScene.h" // CLASS IMPLEMENTATIONS #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED #pragma mark AppController - iOS @implementation AppController - (void) applicationDidFinishLaunching:(UIApplication*)application{ // CC_DIRECTOR_INIT() // // 1. 初始化一个0bit深度的EAGLView,和一个RGB565的渲染器 // 2. EAGLView 多点触摸不使能 // 3. 创建一个UIWindow设置其为window变量 // 4. 将EAGLView的父类设为新创建的window // 5. 创建显示链接指针 // 5a. 如果失败了,会使用一个NSTimer 指针 // 6. 运行在60fps // 7. 不现实fps // 8. 设备情况:细节描写(portrait) // 9. 将这个指针连到EAGLView // CC_DIRECTOR_INIT(); // 获取共享指针... CCDirector *director = [CCDirector sharedDirector]; //设置景深模式 [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; // 开启显示fps [director setDisplayFPS:YES]; // 开启高级资源模式 (Retina Display) on iPhone 4 and maintains low res on all other devices if ([UIScreen instancesRespondToSelector:@selector(scale)]) [director setContentScaleFactor:[[UIScreen mainScreen] scale]]; // 为PNG/BMP/TIFF/JPEG/GIF 设置默认文本格式 // 可以是 RGBA8888, RGBA4444, RGB5_A1, RGB565 // 你可以随时改变. [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; CCScene *scene = [CCScene node]; [scene addChild: [nextAction() node]]; [director runWithScene: scene]; } // 发生调用,暂停游戏-(void) applicationWillResignActive:(UIApplication *)application{ [[CCDirector sharedDirector] pause];} // 调用被拒绝-(void) applicationDidBecomeActive:(UIApplication *)application{ [[CCDirector sharedDirector] resume];} // 程序将结束- (void)applicationWillTerminate:(UIApplication *)application{ CC_DIRECTOR_END();} // 置于后台-(void) applicationDidEnterBackground:(UIApplication*)application{ [[CCDirector sharedDirector] stopAnimation];} // 置于前台-(void) applicationWillEnterForeground:(UIApplication*)application{ [[CCDirector sharedDirector] startAnimation];} // 清理内存- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{ [[CCDirector sharedDirector] purgeCachedData];} - (void) dealloc{ [window release]; [super dealloc];} // next delta time will be zero-(void) applicationSignificantTimeChange:(UIApplication *)application{ [[CCDirector sharedDirector] setNextDeltaTimeZero:YES];} @end #elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) #pragma mark AppController - Mac@implementation Demo_Mac_PortAppDelegate @synthesize window=window_, glView=glView_; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { CCDirector *director = [CCDirector sharedDirector]; [director setDisplayFPS:YES]; [director setOpenGLView:glView_]; // Enable "moving" mouse event. Default no. [window_ setAcceptsMouseMovedEvents:NO]; [[CCDirector sharedDirector] runWithScene: [DemoScene scene]];} @end#endif |
使用applicationDidFinishLaunching方法,你会注意到[[CCDirector shardDirector] runWithScene:[DemoScene scene]]这一行。这一行定义了我们打算令工程开始的视图。在下一部分我会为一个新的Objective-C类列出更多的代码。
创建新的Objective-C的类
在此时我们需要创建新的Objective-C的类。右击你的Xcode工程界面上的Classes group,之后点击Add->New File.你会看到下面的对话框:
点击下一步你会看到:
我已经命名我的类为DemoScene.m ,注意检查创建相应的DemoScene.h的方框选中。点击finish,可以看到新的类。下面是这两个文件中的代码,如果你对cocos2d熟悉,那么下面的代码你不会陌生:
DemoScene.h
1234567891011121314151617181920212223242526272829 | //// DemoScene.h// Demo Mac Port//// 由 Chris Fletcher在2010/24/10创建.// Copyright 2010 __MyCompanyName__. All rights reserved.// #import#import "cocos2d.h" @interface DemoSceneLayer : CCLayer { CCDirector *Director; }@end @interface DemoScene : CCScene { DemoSceneLayer *_layer; } @property (nonatomic, retain) DemoSceneLayer *layer; +(id)scene; @end |
DemoScene.m
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | //// DemoScene.m// Demo Mac Port//// 由 Chris Fletcher在2010/24/10创建.// Copyright 2010 __MyCompanyName__. All rights reserved.// #import "DemoScene.h" @implementation DemoScene@synthesize layer = _layer; + (id)scene { CCScene *scene = [CCScene node]; DemoSceneLayer *layer = [DemoSceneLayer node]; [scene addChild:layer]; return scene; } - (id) init { if ((self = [super init])) { self.layer = [DemoSceneLayer node]; [self addChild:_layer]; } return self;} @end @implementation DemoSceneLayer - (id)init { if ((self = [super init])) { CGSize winSize = [CCDirector sharedDirector].winSize; CCSprite *starBG = [CCSprite spriteWithFile:@"starbg.png" rect:CGRectMake(0, 0, 960, 640)]; starBG.position = ccp(winSize.width/2, winSize.height/2); [self addChild:starBG]; } return self;} -(void) dealloc { [super dealloc]; } @end |
正如你所看到的,我们为图层(layer)和视图(scene)创建了接口和实现,之后将CCSprite添加到图层中。这是非常基础的Cocos2d功能,但是对于你上手来说足够了。
目前我们还是不能建造和运行这个工程。还有一些事情要处理,引入一些框架和图片并且作一些修改。下一部分将会涉及我们需要引入的框架。
引入额外的框架
这一部分设计我们需要添加的框架以及如何添加框架。我们需要添加的框架如下:
- QuartzCore.framework
- OpenGL.framework
- ApplicationServices.framework
- libz.dylib
在Framework上右击,然后点击Add->Existing Frameworks.之后下面的窗口会出现:
找到QuartzCore.framework然后点击添加,重复该步骤添加剩下的三个。
在你完成添加之后,Xcode工程界面应该跟下图类似:
之后我们需要做的就是引入一些图片然后做一些界面的修改。这篇教程比较长,但是我保证快到结尾了。下一部分我会快速讲述需要添加的图片。
将图片添加到工程中
在DemoScene.m中使用了CCprite,该CCprite使用了一个名为starBG.png的图片。你可以在这里下载该。
Cocos2d资源要求我们的资源文件夹中有一个称作fps_images.png的文件来渲染在底部左边角出现的图片。你可以在解压缩后的Cocos2d/Resources/fonts 文件夹中找到这个文件。
之后你把这两个文件放到Xcode工程的资源文件夹中。
此时我们已经完成了对Xcode工程来说必需的步骤,唯一未完成的是使用界面编辑器(Interface Builder)来为我们的MainMenu.xib文件做一些改动。
MainMenu.xib 与Interface Builder
在Xcode 工程界面中找到MainMenu.xib。它应该位于你的资源文件夹中。双击这个文件,会启动界面编辑器。
界面编辑器启动后,首先需要确定程序窗口的大小。为了简化,我设置窗口为960*640大小,因为我的图片本来都是为iPhone4准备的。
在你调整完大小后,屏幕截图如下:
你需要在Window Attributes中改变设置。在底部找到One Shot的标志然后不勾选这一项:
在改变窗口大小和取消One Shot模式之后,我们需要添加一个OpenGL的视图。在library中向下滚动查找OpenGL View。将它拖入你的窗口。你现在可以看到下面的图:
将该OpenGL视图的大小调整为窗口大小,窗口变化如下:
现在窗口和Open GL视图大小都是960*640,下面需要对该视图做一些改变。首先,要将该类变为MacGLView。选中OpenGL视图在Identity 标签下将它的名字改为MacGLView。
下一步,点击Attributes 标签,具体设置如下图所示:
在你完成上面的修改之后,下面是最后的修改。我们需要在OpenGL View的AppDelegate中创建一个到glView的链接。因此创建这个链接的具体设置如下所示:
现在我们已经完成了界面编辑,保存退出界面生成器,返回Xcode工程。在此时为在Mac OS X上运行cocos2d程序的准备都完成了,启动你的程序之后你可以看到如下所示的截图:
恭喜,你已经完成了在Mac OS X上创建程序的基础模块。在创建这个教程的时候我努力使它周密并且希望没有遗漏什么东西。你可以在下面下载该工程文件。
(6.9M)
这个教程有用么?你已经利用该教程在Mac上创建基于cocos2d的程序了么?期待您的反馈。
原文作者:Chris Fletcher
原文链接: