zoukankan      html  css  js  c++  java
  • iOS 5 cocos2d 游戏开发实战:第4章 你的第一个游戏

           在本文中,你将编写专属于你的第一个完整的游戏。它不会为你赢得什么奖项,但从中可以学到cocos2d基本要素的使用方法。我会逐步进行介绍,你还能学到一些Xcode的使用方法。

    这个游戏是著名的“Doodle Jump”游戏的倒版,它被贴切地命名为“DoodleDrop”。玩家通过旋转屏幕尽可能躲避落下的障碍物。游戏的最终版本如图4-1所示,你可以在此提前了解一下将在本章创造的作品。

     

    图 4-1 “DoodleDrop”游戏的最终版本

    4.1 按部就班地创建项目

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

    图 4-2 通过cocos2d Application模板创建项目

           此时Xcode的项目视图应如图4-3所示。取决于你所用的cocos2d和Xcode版本,可能还会有更多的文件,或者组的名字可能会有区别。 我已展开Classes和Resources组,它们分别用来添加源代码和游戏资源文件。任何非源代码文件都被当做资源,无论是图像文件、声音文件、文本文件还是plist文件。分组并不是必需的,但如果坚持对同类文件进行分组,那么这将为理清项目带来很大便利。

    图4-3 开始创建游戏!当前的DoodleDrop项目基于cocos2d的HelloWorld项目模板。确保将相应的后续文件添加到了Classes和Resources组中,以保持游戏项目的井然有序

             接下来要面临一个抉择:是先从已经创建好的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所示的保存文件对话框。

    图4-4 添加新的CCNode派生类的最好做法就是利用cocos2d提供的类模板。 在此建立新场景时,我们让CCNode类作为CCLayer的子类

    图4-4 添加新的CCNode派生类的最好做法就是利用cocos2d提供的类模板。 在此建立新场景时,我们让CCNode类作为CCLayer的子类

    图4-5 命名新场景并确认已将其添加到合适的Target中

            我更倾向以通常的方式,按类的功能来命名类。这里我们使用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

    本文摘自:iOS 5 cocos2d 游戏开发实战(第2版)

     

     

    书 号:

    9787302303039

    出 版 社:

    清华大学出版社

    定 价:

    59.80元

    出 版 日 期:

    2012-10-01

    作 者:

    ()伊特海姆()勒夫

    译 者:

    同济大学苹果俱乐部

    系 列书 名:

    清图程序设计系列

    开 本:

    16 开

    页 数:

    456

    印 刷 时 间:

    2012-10-15

    字 数:

    694千字

    版 次:

    2

    包 装:

    平装

    印 次:

    1

    样章试读:

    http://www.tupbook.com/BookView.aspx?id=104

  • 相关阅读:
    基础数据结构总结
    图论总结
    【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线
    【bzoj1015】星球大战starwar
    NOIP2012摆花
    最勇敢的机器人
    【bzoj1056】排名系统
    图的第k短路
    【bzoj1455】罗马游戏
    ti
  • 原文地址:https://www.cnblogs.com/tupbook/p/2725500.html
Copyright © 2011-2022 走看看