博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在 Mac 上创建一个 cocos2d 的项目
阅读量:5296 次
发布时间:2019-06-14

本文共 8186 字,大约阅读时间需要 27 分钟。

转载自:

我已经关注cocos2d小组一段时间了,他们最近的发布版本支持在Mac OS X系统上创建项目。也许是为即将上线的Mac App Store作准备,cocos2d团队正在努力使得从iPhone/iPad到Mac OS X上程序的移植更简单。

目前似乎并不能100%地支持Mac OS X系统,但是基础功能可以实现。你或许比较关心如何使自己iPhone上的项目转而支持Mac OS X,实话说我没找到简单的方法,因此倘若有人可以站出来帮我的话,我非常感激。但是这篇教程的目的将是创建一个新的应用程序。

下面让我们回顾一下为完成这个任务而需要的步骤。

这里可以下载最新的。完成下载之后,解压到Mac上的文件夹中。

  1. 创建新的Cocoa工程。
  2. 将Cocos2d资源添加到项目中
  3. 编辑AppDelegate.h 和AppDelegate.m文件
  4. 引入架构
  5. 创建新的Objective-C的类
  6. 为MainMenu.xib更改Interface Builder中的设置
  7. 引入样例文件

我还得说这不一定是在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

原文链接:

转载于:https://www.cnblogs.com/java20130723/archive/2012/06/25/3212272.html

你可能感兴趣的文章
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
用HttpCombiner来减少js和css的请问次数
查看>>
FUSE-用户空间文件系统
查看>>
将tiff文件转化为jpg文件并保存
查看>>
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>