|
呃,这篇教程之所以放在这里,是因为似乎国内只有GA实现了触发标签树的功能。
我第一次写教程,经验又不足,请大家多见谅。
注意:这篇教程还没有完成!现在正在连载更新中(其实是因为我太懒了……)
今天呢,由我来为想学习Maze TD如何制作的朋友们讲一堂课。
这篇教程是一个进阶教程,因此你可能会有很多不明白的地方。有问题或想学习进阶的地图制作方法,请到地精研究院的论坛
[url=http://ww.ourga.com/forum[/url]或加入群2519534地精研究院集中营。
那么,下面开始转入正题。
首先我们来讲解一下地图的初始化部分。
这一部分涵盖了最基本的内容--例如为玩家设定金钱,创造一些初始化的单位等等。
一、金钱
[trigger]Gold
Events
Map initialization
Conditions
Actions
Player Group - Pick every player in (All allies of Player 1 (Red)) and do (Player - Set (Picked player) Current gold
to 100)
[/trigger]
钱不是万能的,但没有钱是万万不能的--不仅在生活中,在TD中也是如此。
而这个触发器的作用,就是为玩家提供金钱。
它利用的是游戏的初始设定,所有防守玩家为一个阵营实现,从而没有利用变量或是更为繁琐的步骤。
二、创建居民
[trigger]Lives Spawn
Events
Map initialization
Conditions
Actions
For each (Integer A) from 1 to 10, do (Trigger - Run Lives Spawn Tigger <gen> (checking conditions))
[/trigger]
那些居民们,就是由与这个触发器相关联的一个触发器所创造出来的。
而这个触发器利用了循环整数(Interger)来使与这个触发器相关联的触发器多次执行以达到随机创建20个居民的目的。如果你愿意,也可以
创造更多,但要修改生命数远远不止是修改这里就行的。修改生命数的方法,将在后文提到。
三、创建居民(创建部分)
[trigger]Lives Spawn Tigger
Events
Conditions
Actions
Unit - Create 1 小孩 for Player 11 (Dark Green) at (Random point in Lives <gen>) facing (Position of (Triggering
unit))
Unit - Create 1 小孩 (2) for Player 11 (Dark Green) at (Random point in Lives <gen>) facing (Position of
(Triggering unit))
[/trigger]
这一部分就是创建居民的部分。要注意的是,这个触发器是创建两名不同的居民,因此前文的循环整数量只递增到了10。
另外这个触发器是在区域内随机点创建20名居民,要注意这一点。
注意:随意修改这个触发器可能会导致居民四处分散!
四、设置无敌
[trigger]Child Invulnerable
Events
Map initialization
Conditions
Actions
Unit - Make (Triggering unit) Invulnerable
Unit Group - Pick every unit in (Units in Lives <gen>) and do (Unit - Make (Picked unit) Invulnerable)
[/trigger]
因为居民阵营与你不在一个阵营(游戏的设置问题),因此必须让居民们无敌以保证你的防御它不会将居民误杀。
但是实际上,即使你的防御塔杀死了居民也不会导致游戏失败,因为游戏的成败是由变量决定的,而变量的问题将在后文提到。
五、设置全地图可见
[trigger]Visibility
Events
Map initialization
Conditions
Actions
Player Group - Pick every player in (All players) and do (Visibility - Create an initially Enabled visibility
modifier for (Picked player) emitting Visibility across (Playable map area))
[/trigger]
这个触发器的作用几乎无须解释--这是一张TD的基本--如果你无法看到敌人在哪里,你如何来设定你的策略?
六、设定时间
[trigger]Fix Time of Day
Events
Map initialization
Conditions
Actions
Game - Turn the day/night cycle Off
Game - Set the time of day to 6.00
[/trigger]
这一部分是为了让游戏中的时间始终保持在6:00而存在的。事实上,这个触发器的作用并不是很大。
注意:要想设定时间请先关闭日夜循环!
既然我们已经讲完了初始化的部分,那么我们开始讲最重要的部分??刷怪系统。
而这一部分的作用绝对无需解释??难道你从来没有玩过TD吗?
一、金钱
[trigger]Bounty Gold
Events
Unit - A unit owned by Player 12 (Brown) Dies
Conditions
Actions
Player - Add EnemyGold[pointer] to (Owner of (Killing unit)) Current gold
[/trigger]
在默认的情况下,杀死野外生物应该会有金钱的收入。但是,在这张地图中,来进攻的是敌人的单位??怎么办呢?在魔兽争霸3中,杀死敌人的单位是不会有金钱的。而在这张地图中,作者使用设定数组型变量的方法解决了这个问题。作者为每一关逐一设定了杀死每一单位的金钱。而如何设定的变量?将在下文提到。
数组型变量:数组型变量能在一组变量中包含大量数据,同时每一个部分对应不同的数据。与一个实数型变量配合就可以实现这个效果。但是要注意,这个实数型变量也要随着游戏的进程而变化,否则就会出现类似于“杀死敌人单位始终只有1元收入”的错误。
二、设定变量。
[trigger]Set Enemies
Events
Map initialization
Conditions
Actions
-------- Level 0 --------
Set i = 0
Set EnemyType = 塞特斯
Set EnemyCount = 20
Set EnemyGold = 1
-------- Level 1 --------
Set i = (i + 1)
Set EnemyType = 霜冻之狼
Set EnemyCount = 20
Set EnemyGold = 1
-------- Level 2 --------
Set i = (i + 1)
Set EnemyType = Ghouls
Set EnemyCount = 20
Set EnemyGold = 2
-------- Level 3 --------
Set i = (i + 1)
Set EnemyType = Fish Man
Set EnemyCount = 20
Set EnemyGold = 2
-------- Level 4 --------
Set i = (i + 1)
Set EnemyType = Assasin
Set EnemyCount = 20
Set EnemyGold = 7
-------- Level 5 --------
Set i = (i + 1)
Set EnemyType = Troll
Set EnemyCount = 20
Set EnemyGold = 4
-------- Level 6 --------
Set i = (i + 1)
Set EnemyType = Skelly
Set EnemyCount = 20
Set EnemyGold = 4
-------- Level 7 --------
Set i = (i + 1)
Set EnemyType = 憎恶
Set EnemyCount = 20
Set EnemyGold = 4
-------- Level 8 --------
Set i = (i + 1)
Set EnemyType =牛头人
Set EnemyCount = 20
Set EnemyGold = 4
-------- Level 9 --------
Set i = (i + 1)
Set EnemyType = Gnoll2
Set EnemyCount = 20
Set EnemyGold = 4
-------- Level 10 --------
Set i = (i + 1)
Set EnemyType = Mad Maze Runners
Set EnemyCount = 20
Set EnemyGold = 5
-------- Level 11 --------
Set i = (i + 1)
Set EnemyType = Windrunner (女妖)
Set EnemyCount = 20
Set EnemyGold = 5
-------- Level 12 --------
Set i = (i + 1)
Set EnemyType = Flying Beauties
Set EnemyCount = 20
Set EnemyGold = 5
-------- Level 13 --------
Set i = (i + 1)
Set EnemyType = 迅猛野兽
Set EnemyCount = 20
Set EnemyGold = 6
-------- Level 14 --------
Set i = (i + 1)
Set EnemyType = Golem
Set EnemyCount = 20
Set EnemyGold = 6
-------- Level 15 --------
Set i = (i + 1)
Set EnemyType = 鹰身女妖流氓
Set EnemyCount = 20
Set EnemyGold = 7
-------- Level 16 --------
Set i = (i + 1)
Set EnemyType = Big Bad Lizard
Set EnemyCount = 20
Set EnemyGold = 7
-------- Level 17 --------
Set i = (i + 1)
Set EnemyType = 树妖?
Set EnemyCount = 20
Set EnemyGold = 8
-------- Level 18 --------
Set i = (i + 1)
Set EnemyType = Water Fighter (等级3)
Set EnemyCount = 20
Set EnemyGold = 8
-------- Level 19 --------
Set i = (i + 1)
Set EnemyType = Master Maze Minion
Set EnemyCount = 20
Set EnemyGold = 9
-------- Level 20 --------
Set i = (i + 1)
Set EnemyType = Flying Hag
Set EnemyCount = 30
Set EnemyGold = 10
-------- Level 21 --------
Set i = (i + 1)
Set EnemyType =僵尸
Set EnemyCount = 20
Set EnemyGold = 10
-------- Level 22 --------
Set i = (i + 1)
Set EnemyType = Tree Runners
Set EnemyCount = 20
Set EnemyGold = 15
-------- Level 23 --------
Set i = (i + 1)
Set EnemyType = Sylvanas
Set EnemyCount = 20
Set EnemyGold = 15
-------- Level 24 --------
Set i = (i + 1)
Set EnemyType = Mal'Ganis
Set EnemyCount = 30
Set EnemyGold = 16
-------- Level 25 --------
Set i = (i + 1)
Set EnemyType = B'Druid (变熊)
Set EnemyCount = 30
Set EnemyGold = 16
-------- Level 26 --------
Set i = (i + 1)
Set EnemyType = Kel'Thuzad
Set EnemyCount = 30
Set EnemyGold = 17
-------- Level 27 --------
Set i = (i + 1)
Set EnemyType = Hellscream
Set EnemyCount = 30
Set EnemyGold = 18
-------- Level 28 --------
Set i = (i + 1)
Set EnemyType = B'Crypt
Set EnemyCount = 25
Set EnemyGold = 19
-------- Level 29 --------
Set i = (i + 1)
Set EnemyType = Nerubian'S
Set EnemyCount = 30
Set EnemyGold = 20
-------- Level 30 --------
Set i = (i + 1)
Set EnemyType = 食人鬼魔法师
Set EnemyCount = 20
Set EnemyGold = 30
-------- Level 31 --------
Set i = (i + 1)
Set EnemyType = Titan
Set EnemyCount = 20
Set EnemyGold = 30
-------- Level 32 --------
[/trigger]
在这一部分中,作者手动逐一设定了每一个关卡应该出现的敌人,敌人数量,以及杀死敌人获得的金钱等。要修改每一关卡出现的敌人数据,可以在这里修改。
注意:这里的i,代表了游戏的关卡数。前文所提到的实数型变量,就是这个变量。这里设定i=i+1是很常用的一个手法,使用这个手法之后你就不需要再逐一写入数组型变量的数值了。
三、刷怪(引子部分)
[trigger]Time Spawn
Events
Time - Elapsed game time is 30.00 seconds
Conditions
Actions
Trigger - Run Display Level Text <gen> (checking conditions)
For each (Integer A) from 1 to EnemyCount, do (Trigger - Run Spawn Monsters <gen> (checking conditions))
[/trigger]
这里利用了前文所提到的“循环整数”和实数型变量来完成反复刷怪的目的。EnemyCount这一实数型变量在每一关都有一个对应的值,而实数型变量i则是对应每一关的数据。这个触发器只是一个开头,它是为反复刷怪而不用大量写入触发器而存在的。这里的时间是对应初次刷怪的,
后面关卡的刷怪将由下文的触发器配合这一触发器来引发。这一触发器同时也引导着给玩家的每一关即将到来的信息的触发器。
四、下一关
[trigger]Next Round
Events
Player - Player 12 (Brown)'s Food used becomes Less than 1.00
Conditions
Actions
Set pointer = (pointer + 1)
Player Group - Pick every player in (All players) and do (Player - Add 25 to (Picked player) Current gold)
For each (Integer A) from 1 to EnemyCount, do (Trigger - Run Time Spawn <gen> (ignoring conditions))
Wait 10.00 seconds
[/trigger]
每一个单位都要占用一定的食物,而作为进攻方的敌人所使用的食物量如果小于1,就意味着敌人已经没有单位了。因此,这里就可以利用这一条件来完成下一关的开始。这里设置Pointer的作用是设定游戏现在所在的关卡。但是,为什么要设置两个不同的变量?这是因为它们对应不同的目的。数值型变量i对应设定敌人变量,和刷怪的引子部分。而pointer对应的是游戏的其他部分。
因为前文的刷怪部分只对应第一次刷怪,所以其他的刷怪只能由这一触发器来引发。
五、刷怪(刷怪部分)
[trigger]Spawn Monsters
Events
Conditions
Actions
Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Top Left <gen>) facing (Position of (Triggering unit))
Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Top Right <gen>) facing (Position of (Triggering unit))
Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Bottom Left <gen>) facing (Position of (Triggering unit))
Unit - Create 1 EnemyType[pointer] for Player 12 (Brown) at (Random point in Monster Spawn Bottom Right <gen>) facing (Position of (Triggering unit))
[/trigger]
与前文如此之多的触发器对应,真正刷怪的部分只有几行,诸位大跌眼镜吧?但是,如果不与前文的大量触发器对应,这个触发器就会变得很麻烦??甚至于无法完成。若果你想使用Maze TD的刷怪系统,请注意,一定要将前文的部分一起复制,并且要打开“自动创建未知变量”的功能,否则……
六、显示关卡信息
Display Level Text
[trigger] Events
Conditions
Actions
Wait 1.00 seconds
Game - Display to (All players) for 7.00 seconds the text: (|c00FFFF00Level + ((String(pointer)) + (: |r + ((Name of (Last created unit)) + ( ( + ((String(EnemyCount[pointer])) + each corner)))))))
[/trigger]
这里之所以要等待一秒,是因为如果不等待,刷怪和显示信息就会同时完成,就会出现信息显示不正确的状况。请记住这一点,它十分重要。
[ 本帖最后由 狐狸兄EX 于 2006-4-25 08:31 编辑 ] |
|