频道栏目
读书频道 > 移动开发 > 其他综合 > iOS 5 cocos2d 游戏开发实战(第2版)
4.1 按部就班地创建项目
2012-10-17 15:32:51     我来说两句
收藏   我要投稿
《iOS 5 cocos2d游戏开发实战(第2版)》将引导您开发富有吸引力的2D游戏。书中展示了如何使用cocos2d这款强大的游戏引擎来开发iPhone和iPad游戏,此外还介绍了游戏中的瓦片地图、虚拟摇杆、Game Center等。本书...  立即去当当网订购

现在就打开Xcode,我将逐步引导你创建你的第一个cocos2d游戏。在Xcode中,选择File | New Project…,然后选择cocos2d Application模板,如图4-2所示。Xcode会要求你为新项目输入一个名称,这里输入DoodleDrop。如果需要,请把它存储到一个合适的位置。由于Xcode会自动创建一个名为DoodleDrop的子文件夹,因此不必多此一举。


 

此时Xcode的项目视图应如图4-3所示。取决于你所用的cocos2d和Xcode版本,可能还会有更多的文件,或者组的名字可能会有区别。

我已展开Classes和Resources组,它们分别用来添加源代码和游戏资源文件。任何非源代码文件都被当做资源,无论是图像文件、声音文件、文本文件还是plist文件。分组并不是必需的,但如果坚持对同类文件进行分组,那么这将为理清项目带来很大便利。


 

接下来要面临一个抉择:是先从已经创建好的HelloWorldScene(没准在后面会重命名它)开始工作呢,还是要通过额外的步骤创建你自己的场景并替代HelloWorldScene呢?我选择后者,因为最终你还是得加上新的场景,不如借着这个过程摸清门路。

请确认Classes组已被选中,然后选择菜单File | New File…,或者右击Classes文件夹,从弹出菜单中选择Add | New File…,打开New File对话框,如图4-4所示。由于cocos2d为最重要的节点提供了类模板,不加以利用难免可惜。在cocos2d的User Templates中,选择CCNode  class并单击Next,确认它已设置成CCLayer的子类。然后再次单击Next,这会打开如图4-5所示的保存文件对话框。


 

我更倾向以通常的方式,按类的功能来命名类。这里我们使用GameScene.m。DoodleDrop的游戏进程将在这个场景中展开,所以这个名字听上去还算合适。记住一定要选中DoodleDrop复选框。如果使用的是Xcode 3,还必须选中Also create GameScene.h”(同时创建“GameScene.h”)复选框。Targets用于指定Xcode中创建不同版本可执行文件的方式。例如,游戏的iPad 版本通常创建为单独的Target。在此情况下,我们只有一个Target,然而一旦创建好iPad 的一个Target,就要确保某些情况不会发生,比如iPad 的高分辨率图像不会意外加入到iPhone或iPod Touch Target中。
 
注意:

不检查Add to targets复选框组会导致各种各样的问题,从编译错误到“文件未找到”错误,或是因为文件没有被添加到需要该文件的Target而导致的游戏程序崩溃。抑或是文件添加到根本不需要此文件的Target而造成空间浪费,例如在普通的iPhone或iPod Touch中加入iPad 和iPhone 4的高分辨率图像。

此时此刻,我们的GameScene类还是一片空白。我们要做的第一件事就是为它添加“+(id) scene”方法,从而将它设置为场景。这里添加的代码与第3章中讲过的没有本质差别,只是层的类名更改了一下。任何类中几乎都需要“– (id) init”和“– (void) dealloc”方法,所以很有必要现在就加上它们。我是个很谨慎的程序员,所以我决定加上第3章中介绍过的日志记录语句。编辑后的结果分别为程序清单4-1中的GameScene.h和程序清单4-2中的GameScene.m。

程序清单4-1  加入Scene方法的GameScene.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface GameScene : CCLayer
{
}
+(id) scene;
@end
程序清单4-2  加入Scene方法和标准方法(包括日志记录语句)的GameScene.m
#import "GameScene.h"
@implementation GameScene
+(id) scene
{
CCScene *scene = [CCScene node];
CCLayer* layer = [GameScene node];
[scene addChild:layer];
return scene;
}
-(id) init
{
if ((self = [super init]))
{
CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self);
}
return self;
}
-(void) dealloc
{
CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self);
// never forget to call [super dealloc]
[super dealloc];
}
@end

现在你可以安全地删除HelloWorldScene类了。当被询问时,选中Also Move to Trash选项,将文件同时从Xcode项目和硬盘中删除。同时选中这两个文件,然后选择Edit | Delete或从右击菜单中选择Delete。删除了HelloWorldScene类之后,必须修改DoodleDropApp- Delegate.m,将任何使用HelloWorldScene的地方改为使用GameScene。程序清单4-3标出了对#import与runWithScene语句所做的必要修改。将设备方向改成了Portrait模式,因为我们的游戏最适合在此模式下运行。

程序清单4-3  修改DoodleDropAppDelegate.m文件,使用GameScene类而不是Hello-WorldScene类

// replace the line #import “HelloWorldScene.h” with this one:
#import "GameScene.h"
- (void) applicationDidFinishLaunching:(UIApplication*)application
{

// Sets Portrait mode
[director setDeviceOrientation:kCCDeviceOrientationPortrait];

// replace HelloWorld with GameScene
[[CCDirector sharedDirector] runWithScene: [GameScene scene]];
}

编译并运行,你会看到一个空白场景。你成功了!如果出现任何问题,请将该项目与随书附带的DoodleDrop01项目进行对比。

注意:

从cocos2d 0.99.5版本开始,cocos2d Xcode项目模板中增加了一个名为GameConfig.h的文件。如果用某个cocos2d Xcode项目模板创建了一个新项目,但是发现Portrait模式不能工作,可能是因为游戏被默认设为自动旋转。如果在GameConfig.h中看到语句:
 
#define GAME_AUTOROTATION kGameAutorotationUIViewController

需要把它改为以下这行语句以禁用自动旋转:

#define GAME_AUTOROTATION kGameAutorotationNone

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:概述
下一篇:4.2 添加Player Sprite
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站