如何设计开发iPhone塔防游戏6-连绵不绝

本文由eseedo(泰然骷髅会成员)翻译,泰然授权转载,转载请通知eseedo(http://blog.sina.com.cn/eseedo)。(-by Iven)

在继续之前,先让我们回顾一下之前教程已经实现的内容:

1.不同类型的敌人可以通过设定的路径抵挡目的地(如果能活下来的话)

2.将炮塔放置在沿途的路径上

3.炮塔将自动向靠近的敌人开火

4.敌人具有HP(生命值)属性,当HP为0(被炮弹击中)时会挂掉,并从屏幕中消失并删除

5.到目前为止只有“一大波”敌人(千万别乱想)。



这部分教程的主要作用是:

1.创建“几个大波的”敌人

2.定义每一波敌人中不同类型的敌人有多少(红色、绿色)

在继续之前,首先请下载源代码:

http://www.iphonegametutorials.com/usr/uploads/2012/01/TowerDefensePart5a.zip



当然,你还得安装Cocos2D。

虽然游戏创建的模板显然是老版本的Cocos2d,但我用Lion10.7.3+Xcode4.3.1+Cocos2D v2.0 beta2+iOS5.1进行测试,还是可以正常运行的。

 

虽然目前为止场景中的敌人还很简陋,不过,他们已经连绵不绝的向你扑来了,而且很可能会变成下面的样子。。。

如何设计开发iPhone塔防游戏6-连绵不绝

 

肿么办?我们的火星兄弟会给你提供武器的,慢慢来吧。

如何设计开发iPhone塔防游戏6-连绵不绝

 

好了,异星战斗固然很酷,我们也得一点点来。

为了创建“几大波”敌人,首先需要定义多个波次,而这一点是通过TutorialScene.m的addWaves方法实现的。

最开始的代码如下所示(和项目中的会有区别):

-(void)addWaves {

     DataModel *m = [DataModel getModel];

     Wave *wave = nil;

     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 0.3 TotalCreeps:50];

     [m._waves addObject:wave];

     wave = nil;

     wave = [[Wave alloc] initWithCreep:[StrongGreenCreep creep] SpawnRate:1.0 TotalCreeps:5];

     [m._waves addObject:wave];

     wave = nil;!

}

那么这个方法究竟是搞哪样呢?其实它只是定义了“两大波”敌人,第一波敌人一共有50个怪兽,并以每秒0.3个的速度出现。在定义了需要的波次后,就可以将其添加到一个数组中进行存储,并将wave变量设置为nil。那么如果想要添加更多的波次怎么办呢?很简单,只需要copy&paste,并修改一些spawn rate(出现速度)和totalcreeps(敌人总数)这两个参数就可以了。因此,项目中的代码实际上如下:

-(void)addWaves {
     DataModel *m = [DataModel getModel];

     Wave *wave = nil;
     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 1.0 TotalCreeps:10];
     [m._waves addObject:wave];
     wave = nil;
     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 0.7 TotalCreeps:20];
     [m._waves addObject:wave];
     wave = nil;!
     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 0.5 TotalCreeps:50];
     [m._waves addObject:wave];
     wave = nil;
     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 0.3 TotalCreeps:70];
     [m._waves addObject:wave];
     wave = nil;
     wave = [[Wave alloc] initWithCreep:[FastRedCreep creep] SpawnRate: 0.2 TotalCreeps:100];
     [m._waves addObject:wave];
     wave = nil;
}

需要注意的是,如果我们想让敌人以每秒超过1个的速度出现,就必须修改scheduler定时器以调用游戏逻辑gameLogic。

切换到TutorialScene.m,找到init方法。此时可以看到游戏逻辑方法的调用代码如下:

[self schedule:@selector(gameLogic:) interval:1.0];

gameLogic方法会查看spawn rate,并将其和自上一次出现以来已消耗的时间进行对比。因此,如果我们想要敌人出来的更快,就需要修改interval。

比如:

[self schedule:@selector(gameLogic:) interval:0.1];

因为0.1可以被所有的spawn rates整除,因此敌人会以设定的spawn rate(出现速度)出现。

 

让敌人出现:

接下来要做的事情就是在当前波次的敌人已被击败时让新一波的敌人出现。这就比较简单了。在update方法中添加以下代码:

Wave *wave = [self getCurrentWave];

if ([m._targets count] ==0 && wave.totalCreeps

// NSLog(@"Get next wave\n");//use for debugging

[self getNextWave];

}

这段代码的作用是:从m._waves数组中获取当前波次,然后查看是否屏幕中还有任何敌人,并确保当前波次的所有敌人都已出现在屏幕中。如果以上都已确认,就意味着当前波次已经结束,可以让新一波的敌人出现了。

此时还有最后一件事要做的。在getNextWave方法中,我们会检查是否在波次要结束的时候。因此我们需要检查在游戏中总共设置了多少波次。在这个项目中我们设置的波次是5次。

if (self.currentLevel >= 5){

//self.currentLevel = 0;

NSLog(@"you have reached the end of the game!");

}

好了,这一步完成之后,就可以让5波敌人不断出现了。

后续的教程将陆续补上。

 

到目前为止的源代码:

http://www.iphonegametutorials.com/usr/uploads/2012/01/TowerDefensePart5a.zip

 

原文地址:

http://www.iphonegametutorials.com/2012/01/11/cocos2d-game-tutorial-–-how-to-build-a-tower-defense-game-for-the-iphone-part-5a-multiple-waves/

标签: cocos2d教程, 塔防游戏教程

?>