魔兽战役简单教程.doc

上传人:鲁** 文档编号:549273956 上传时间:2024-02-14 格式:DOC 页数:33 大小:2.85MB
返回 下载 相关 举报
魔兽战役简单教程.doc_第1页
第1页 / 共33页
魔兽战役简单教程.doc_第2页
第2页 / 共33页
魔兽战役简单教程.doc_第3页
第3页 / 共33页
魔兽战役简单教程.doc_第4页
第4页 / 共33页
魔兽战役简单教程.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《魔兽战役简单教程.doc》由会员分享,可在线阅读,更多相关《魔兽战役简单教程.doc(33页珍藏版)》请在金锄头文库上搜索。

1、战役篇首先作两点重要的说明:1、在制作战役时,如果要保存,请直接在战役编辑器上保存,一定不要在单张地图上保存,否则会导致该地图打不开。如果已经遇到了这种情况,不必惊慌,可以在该地图上做少许修改(如添加一个空触发器再删除),然后在战役编辑器上保存一遍,即可恢复该地图。2、如果要测试战役,不要在单张地图上点“测试地图”,要保存战役后进入游戏进行测试。这是因为,跟切换地图和章节相关的很多动作,以及战役编辑器中的自定义数据,都只能在运行战役时生效。看一下战役编辑器的基本功能。打开战役编辑器,可以看到4个模块:普通、载入画面、自定义数据、导入文件。普通:在这里可以设置战役的说明文字,以及导入地图。导入地

2、图并保存战役后,地图就整合在战役文件里了,可以把原始地图文件删掉。要编辑导入的地图,在右面的地图列表里右击,选择“编辑地图”。导入的地图请一律用英文名,并且为了后面切换地图方便,请保持所有地图的后缀名一致,要么都是“.w3m”,要么都是“.w3x”。导入的地图无论再怎么修改,后缀名都不会改变了。载入画面:在这里可以设置战役背景的图片(比如暗夜战役的弓箭手mm)、鼠标指针形状(因种族而异),还有战役屏幕按钮。战役屏幕按钮,也就是战役背景中的章节选项。新建一个按钮,可以设置章节名称和它通往的地图。还有一个“初始可见”选项,顾名思义,勾选了该项的按钮一开始就能看到,没选的按钮就是隐藏的,可以通过触发

3、来显示。另外,每个按钮前面都有一个序号(ID),用触发显示按钮时就是以这个序号为准的。自定义数据:和物体编辑器功能相同。区别在于,在这里定义的数据能被战役里的所有地图共用,并且会在每张地图的物体编辑器里以蓝色字体显示出来。如果这里和物体编辑器的数据有冲突,则以物体编辑器为准。建议大家的自定义物体数据都在这里改。另外这里的数据在测试单张地图时是无效的,只有运行战役才会生效。导入文件:顾名思义。这里的导入文件同样可以被所有地图共用。接下来就是大家最关心的切换章节和切换地图了。我们先做点准备工作。创建三张地图(为方便测试,用尺寸小点的),分别命名为“C1_1.w3m”、“C1_2.w3m”、“C2_

4、1.w3m”。其中第一个数字表示章节,第二个数字表示同一章的地图序号。做点最基本的处理:放置开始点;删除对战初始化触发器;在情节队伍中勾选“自定义队伍设置”和“固定玩家设置”,这样可以将游戏界面固定为某一种族的;随便修改一下地图说明和地形,将两张地图区别开。把三张地图导入新建战役。在“载入画面”模块为“C1_1.w3m”和“C2_1.w3m”各添加一个按钮,分别命名为“第一章 C1_1”和“第二章 C2_1”,其中第一章设为初始可见。保存战役为“教程战役.w3n”,删除两张地图的原始文件。在“自定义数据”模块中自定义一个英雄,作为战役的主角。比如一个称谓为“大师与天才”的血魔法师。切换地图的核

5、心是游戏缓存。先简单介绍一下原理:在一张地图上创建一个游戏缓存,可以将一些数据(包括单位、整数、实数、字符串)储存起来,将其保存到本地硬盘。然后通过“保存并切换关卡”、“保存并读取进度”等动作,进入同一战役的另一张地图。在新的地图上,创建一个同名的游戏缓存,从硬盘读取缓存数据,便可以将上一张地图的数据复制过来,也就是继承上一张地图的进度。关于游戏缓存,有一些诡异的问题,比如无法彻底删除、同一硬盘上有数量限制等。总之就是创建的游戏缓存越少越好。所以我们只在每张地图初始化时创建一个游戏缓存,一律用同样的名称。现在开始制作切换章节的触发,即从第一章“C1_1.w3m”进入第二章“C2_1.w3m”。

6、在“C1_1.w3m”上设置一块矩形区域“to C2_1”,作为通往第二章的入口。当玩家1的单位进入该矩形区域时,即进入第二章。在地图“C1_1.w3m”上,添加一个游戏缓存变量“GC”,和一个单位变量“Char”,创建一个初始化触发器为其赋值:游戏缓存的名字可以随便取,不过要保持每张图一致。我用的“Demo”是演示的意思。然后是切换章节触发:第一张地图到此为止,再来编辑地图“C2_1.w3m”。设置矩形区域“from C1_1”,从第一章读取的单位就放在区域中心。同样添加游戏缓存变量“GC”和单位变量“Char”,然后用初始化触发器读取上一章的主角数据:大功告成,现在保存战役,进入游戏测试下

7、,应该可以从第一章进入第二章了。注意缓存的类别名C2,用的是下一章节的序号。这是为了防止玩家随意进入各个章节,导致缓存数据混乱。比如说,假如所有地图都用相同的类别名“A”,某玩家进入第三章,过关后该章的数据存入了类别“A”,然后他不进第四章,而是又回头玩第二章,那么他在第二章读到的就是第三章的数据。另外,以上只是实现关卡切换的最基本动作,实际应用时还要添加很多动作来应对各种意外情况,后面会慢慢讲到。接下来是切换地图。我们来写一套触发,让玩家可以在第一章的“C1_1.w3m”和“C1_2.w3m”两张地图之间随意切换。切换地图的原理和切换章节相同,都是用缓存传递数据。区别在于,切换地图是双向的,

8、去了之后还要回来,所以在离开一张地图前往另一张时,要做好善后工作,比如储存进度以便回来时读取,删除已记录的单位等。另外切换地图时要继承的不仅是单位,还有其他一些数据,比如游戏时间、玩家资源、任务进度等,都要用缓存记录下来。另外,由于每一章的分地图(比如“C1_2.w3m”)没有章节按钮,玩家不能从战役界面直接进入,所以不用担心数据弄混的问题,缓存类别统一用一个名字就可以了。我习惯用“MS”,即MapSwitch(标准的中式英语- -)。在地图“C1_1.w3m”上添加矩形区域“to C1_2”,作为通往地图“C1_2.w3m”的入口。再添加矩形区域“from C1_2”,作为从“C1_2.w3

9、m”回来时读取单位的位置(参见8L的图)。下面是切换到“C1_2.w3m”的触发:看最后一项的if动作,其含义是:如果存档“C1_2.w3z”存在,说明玩家已去过地图“C1_2.w3m”,并在回来时留下了该存档,于是要读取该进度。如果存档不存在,说明还没去过,要用“保存并切换到关卡”动作切换过去。当玩家要从“C1_2.w3m”回来时,读取现在留下的存档文件“C1_1.w3z”就可以了。注意每次测试完战役,都要手动删除相关的存档文件,以免对下次测试进行干扰。用触发也可以删除存档文件,其应用留到后面再讲。从“C1_2.w3m”回来时,仍然要读取数据。读取数据的触发如下:地图“C1_1.w3m”上的

10、工作就结束了,再来编辑地图“C1_2.w3m”。为了方便,把上面的两个触发“MapSwitch”和“LoadData”直接复制过来。添加矩形区域“from C1_1”和“to C1_1”。对两个触发进行修改。其中“LoadData”不需要做别的改动,只要把读取单位的矩形区域替换成“from C1_1”,然后在地图初始化时运行一遍:“MapSwitch”修改如下:因为是从“C1_1.w3m”切换过来的,所以存档“C1_1.w3z”必然存在,不用if判断了。别忘了把存档名“C1_1”和“C1_2”换过来。现在保存战役测试一下,应该可以在两张地图之间任意切换了。记得每次测试完后删除存档。如前所述,这

11、只是切换地图所需的最基本动作。现在我们来考虑一些相关的问题,对其进行改进。1、“LoadData”触发器使用的事件是“游戏读档”。但除了切换地图时读档,玩家自己存档读档也会触发该事件,怎么把两种情况区别开来呢?我们可以在每张地图上设置一个布尔变量“MapSwitch”,切换地图和分地图初始化时设其为true,读取数据完毕设为false。读档时判断该变量的值,即可知道是玩家读档还是系统读档。2、切换地图时,其动作在瞬间完成,并且要删除玩家的单位,这在玩家看来可能比较突兀。官方的兽族战役中,切换地图之前会先进入电影模式并淡出镜头,等待一小会再运行切换地图的动作,我们也可以效仿。不过这样又带来一个问

12、题:如果玩家拥有多个单位,在等待的这一小段时间中,可能会有别的单位进入矩形区域,造成重复触发。解决的办法很简单,只要临时关闭触发器即可。3、游戏缓存不能记录任务,那么如何继承上一张地图的任务进度呢?我们可以设置一个整数数组QuestProgress,用来记录每个任务的进度,用缓存在各地图之间传递。切换到每张地图时,根据各整数的数值调整对应任务的状态和说明。比如QuestProgress2 = 0代表任务2尚未激活,QuestProgress3 = 2表示任务3已进行到第2步。4、缓存不能记录单位的技能CD,每次读取单位,技能CD都会重置。这个问题是无法解决的。而用缓存记录读取变身单位时,该单位

13、的变身持续时间也会重置。这就导致单位可以在变身状态下使用变身技能。如果该技能绑定了一些相关触发,比如每秒对周围单位造成伤害等,重复变身就可能造成bug。因此在记录单位之前,要删除该单位身上包括生命周期在内的一切魔法效果。5、切换地图时通常我们只记录英雄单位,将其记录并删除后,可能还会留下一些召唤单位什么的。因此记录完单位后,应将玩家剩下的单位都删除。5、如果玩家队伍中有死亡的英雄,读取时设置其生命值为0,该英雄会再次播放死亡动作,并发布死亡信息。因此对于死亡的英雄,最好在切换地图时将其复活。不想复活的话,可以将其隐藏,杀死之后再显示,可以隐藏死亡动作,但死亡信息是隐藏不掉的。综合以上考虑,对上

14、面的触发作初步改进。首先在每张地图上添加以下变量:布尔值MapSwitch 整数数组QuestProgress修改后的切换地图触发如下:修改后的读取数据触发如下:以上只是对切换地图系统最基本的改进,还有更大的问题需要我们解决。下面的这个问题有点麻烦,而我的表述能力比较差劲,所以可能说得很乱,请大家耐下心来好好理解。我们在判断一张地图是否已经去过时,用的方法是判断该地图相应的存档是否存在。但这种方法是有欠缺的。考虑这样一种情况:玩家在地图1上手动存档,然后第一次进入地图2,再从地图2回来,于是就生成了地图2的存档。这时玩家任务失败了,于是他只好读取刚才的手动存档重新来过。本来在他手动存档的时候,

15、还没去过地图2,地图2的存档是不存在的,而现在却已经存在了。于是出现了混乱,系统会以为他在当前的进度中已经去过地图2,并读取地图2的进度,而这个进度明明是上一次失败的游戏留下来的。换个方式来讲吧,可以这么理解:玩家进行2周目的游戏,却读到了1周目的地图存档。为了解决这个问题,我们需要在每次手动存档时,记录下当前玩家已经去过的地图存档,下次读档时只保留这些地图存档,而把其他的地图存档都删掉,以免混淆。于是我们为每个手动存档建立一个文件夹,把与之相关的地图存档复制到文件夹里。另建立一个文件夹“System”,专门放置游戏过程中的地图存档。每次手动读档时,删除“System”里的地图存档,把所读存档文件夹里的地图存档复制到“Syetem”。比如说,玩家从地图1去了地图2,再回来,于是“System”文件夹里生成了地图2的存档“Map2.w3z”。这时玩家手动存档,文件名为“Save”。于是生成一个名为“Save”的文件夹,把“System”里现有的地图存档“Map2.w3z”复制到“Save”里。接下来玩家又去了地图3,再回来,“System”里又有了“Map3.w3z”

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号