加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

魔兽地图编辑器初级教程-触发器使用-选择英雄

(2006-12-30 17:30:10)
分类: 魔兽相关(地图编辑器.外挂)
例一 开始时允许玩家选择喜欢的英雄。
这里要讲到函数和变量的运用。编辑器里还有许多内置的函数,与变量不同,函数是固定的不能够改变,它有一个最大的特点就是所有函数都有返回值,例如:"Last Created Unit"返回最后创建的单位;"Triggering Unit"返回触发此触发器的单位等等。现在我就为你介绍函数和变量的使用方法。

很多RPG地图都可以让你选择英雄,并且英雄死亡的时候能够复活,这是个非常实用的例子,很多地方你都能运用,但要怎么做呢?

首先打开变量编辑器新建一个变量PlayerUnit,类型设置为单位。可参阅基础知识:变量

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_000.png

然后在地形编辑器中选择地区面板,添加三块区域,默认名字为"地区 000"、"地区 001"、"地区 002"。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_001.png

在单位面板上选择"中立无敌意",然后在"地区 001"和"地区 002"上各放置一个英雄,然后选择"玩家 1 (红色)",放置一个小精灵。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_002.png

在触发事件编辑器里增加一个新触发器,就命名为"ChooseHero1",并为加入指令。

触发事件

  单位 - Unit Enters Region
如果单位进入地区1就运行触发器

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_003.png

单击Region出现以下对话框,选择"地区 001"。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_004.png

两次确定后完成事件的设置,现在新建一个条件。

条件

  Unit-Type Comparison
判断触发的单位类型是否是一个小精灵。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_005.png

点击步兵出现单位类型对话框,选择暗夜精灵族,再选择小精灵后确定。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_006.png

现在就要设置动作了,也就是给玩家一个英雄单位,并将这个单位储存到变量PlayerUnit中。

动作

  单位 - Kill
杀死小精灵,默认(Triggering unit)表示是触发此触发器的单位,也就是小精灵。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_007.png

  单位 - Cearte a Unit
在"地区 000"当中创建一个英雄给玩家1,如下图修改,(Unit-type of 圣骑士 0000 <情报>)这是创建给玩家的单位,单击"选择一个单位"按钮,然后在地图上单击圣骑士,玩家 1 (红色)表示此单位给玩家1,(Center of 地区 000 <情报>)创建位置在"地区 000"正中,默认的建筑朝向单位面向哪个方向。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_008.png

  Set Variable
这条指令将最后创建的英雄赋值给变量PlayerUnit。选择变量为PlayerUnit,然后将默认函数(Triggering unit)改为(Last created unit)(Triggering unit)表示触发此触发器的单位,也就是已经被杀死的小精灵,(Last created unit)表示最后创建的英雄。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_009.png

  特效 - Create Special Effect On Unit
创建一个传送的特效给PlayerUnit,这句仅仅是为了好看。:)

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_010.png

点击Abilities\Spells\NightElf\Blink\BlinkTarget.mdl就能选择特效模型了,同时,这里也用到了变量PlayerUnit。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_011.png

现在要判断第二个英雄,这很简单,只要复制一份触发器,选择触发器"ChooseHero1"点复制,然后点粘贴,就有了一份与"ChooseHero1"相同的触发器。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_012.png

然后单击复制的触发器,将其改名为"ChooseHero2",并修改其中的指令,只用把事件中"地区 001"修改为"地区 002",然后再把Cearte a Unit指令中"圣骑士"改为"山丘之王"就可以了,很简单吧。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_End.png

从上面可以看出,如果你想改变可选择的英雄时,只用修改Cearte a Unit这一条命令中的英雄就行了。运用了变量以后,不管你选择的是那个英雄,只用创建特效给变量PlayerUnit就行了,并且在例二英雄复活的时候我也就可以直接调用PlayerUnit这个变量。

由此可看出,为可能多次运用的对象创建变量是个很好的习惯,合理运用将大大减少你的工作量。

如果你想问,我要做一个多人游戏呢?难到每个人都要设置一次?如果有10个英雄可选,共5个玩家,难道要设置10x5=50个触发器?事实上这个问题很好解决,在这里一个函数起到关键的作用。

首先要把变量PlayerUnit下的数组打上钩,使其成为变量数组。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_013.png

然后修改"单位 - Cearte a Unit",将其中的"玩家 1 (红色)"改为功能"转化 - Convert Player Index To Player",然后点击1,把功能改为"游戏 - Number Of Players" (如下图),确定。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_014.png

同样修改"Set Variable",变量这时候变成了"PlayerUnit [序号]"的形式,把"序号"也改为"游戏 - Number Of Players"就行了。

"游戏 - Number Of Players"表示是触发此触发器的玩家的序号,所以"Player [游戏 - Number Of Players]"就是触发此触发器的玩家,这就使触发器能够自动判断是哪个玩家选择了这个英雄。在调用变量时只用选择数组的序号就行了,比如要调用玩家2的英雄,那么就只用调用对应的变量PlayerUnit[2]就行了。

如果你不想玩家选择相同的英雄呢?只要增加一句:

  Trigger - Turn off
关闭触发器。

This trigger返回当前触发器,这条指令表示关闭当前触发器,触发器将不会再被触发。这句可以放在动作中任何位置,动作不会因此中止,所以建议放在第一条运行,避免因为没有及时关闭而导致其他玩家再次触发此触发器。

mk:@MSITStore:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/qmt16.tmp.chm::/images/Exp01_015.png

你可以多放几个小精灵在地图上测试。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有