-
RPG
地图制作教程
教你如何做自己的
RPG-----
制图教学
< br>
说到魔兽争霸
3
大家肯定不会
陌
生,
那么各位在玩过特色各异的地图以后有没有想过自己动手
做一张地图?摇头拒绝的家伙
们听我把话说完,
其实做一张地图
并不是各位想象的那么困难。
下面我将会简单介绍一下集
合了几
种常见功能的地图的制作方法,
有兴趣的朋友不妨跟着做做。
这次要做的是一个
3C
中的人物选择功
能,
也就是当小精灵进入能量圆的时候选择对应的英雄,这是一个
3C
最普
通的选人功能。那么动手了。
首先找到地图编辑器,编辑器位于魔兽目录下,名为
(世界编辑器)
,双击打开。第一次使用地图编辑器,系统会自动为我
们创
建一张
64*64
大小,环境为罗
丹仑的夏天的新地图。如果想要手动创建新地图,可以通过
点击菜单栏的文件
-
新地图
/File
- New Map
来创建。如果想要关闭在打开编辑器的同时创
建新地图的功能,可以同过选择文件
-
参数设置
-
常规
-
打开时创建新地图
/File
-
Preferences - General - Create a new
map on start_up,
将前面的勾去掉来实现。
地图创建
完毕以后看见的就是这个地图编辑器的组成了,按
p>
2
下
G
关闭坐标格
的显示。在制作上面
提到的功能以前,
让我们先做点准备工作。
首先既然是选择英雄,
那么英雄自然是必不可少
的,按
U
打开单位编辑面板,在这里可以选择我们所希
望的单位放置到地图上,我选择了
恶魔猎人(
Demon
Hunter
)
,血巫师(
Blood
Mage
)和巫妖王(
Lich King
)
,当然各位如果
看上其他英雄请随意,
< br>这并不会影响后面的制作。
顺便说说在单位面板中切换种族的方法是
在第三行左边的那个扩展菜单里面选择希望的种族,
由于选择英雄的时候所看
见的英雄是不
被我们控制的,
必须选择了以后才能控制,
因此一般的做法是将英雄更改为中立单位,
更改
的方法是双击放置在地图上的英雄,选择常规
-
玩家
-
中立无敌意
/General
-
Player
-
Neutral
Passive
。
注意各英雄之间不要间隔太远,
否则让小精灵跑来跑去的很麻烦。
放好英
雄以后当然
还要在英雄面前放个能量圆作为小精灵进入选择用,
能量圆可以在单位面板的中
立敌对分支中找到。
最后再放上选英雄用的小精灵,
由于多个玩家的选择英雄的原理是相同
的,所以这里我们只做
3
个玩家的选择,因此只放属于
3
个
势力玩家的小精灵。如
工作就
算是完
毕了,接着开始做功能部分,要用到触发器。
由于是初次介绍
,为了不扰乱大家的
思维,
所以我对触发器的原理不做太多的介
绍,
大家只需要知道触发器的作用就是可以以事
件的方式来实现
一些功能就可以了。按
F4
打开触发器编辑器
< br>/Trigger
Editor,
删除默认的那
个触发器,那是为
MEELE
准备的。可以看
见在魔兽地图编辑器中,一个触发器是由事件
(
Events<
/p>
)
,环境(
Conditions
)
,动作(
Actions
< br>)三部分左右,这三个部分之间的关系可以
用一个简单的例子说明:
“
火药接触火以后爆炸
”
。
在这里,火药与火接触就是事件,只有二
者接触才会发生以后的动作;
< br>而火药接触的对象必须是火才会爆炸,
所以火在这里作为环境,
< br>限制火药爆炸需要的条件;
火药爆炸就是动作,
是在与火
接触以后引发的动作。
在触发器里
面我们可以根据需要自己修改
事件,
环境,
动作这三部分的内容,
比
如可以将火药与火接触
爆炸改为与水接触爆炸。
那么有了以上概
念,
来看看选择英雄的制作方法,
首先英雄必须在
发生了一个事件以后才会被选择,
而这个事件在这里就是:
< br>小精灵进入能量圆;
但是在这里
必须限制只有小精灵进入
能量圆的时候英雄才会被选择,
其他种类的单位进入则什么都不会
发生,于是整个触发的环境
-
也
就是限制条件也有了,就是:进入能量圆的单位类型是
“
小
p>
精灵
”
;最后就是动作了,英雄被选择,其
实选择英雄的动作就是把英雄的从中立单位更改
为玩家势力控制的单位。
把上面所说的步骤以触发的方式写出来就是这样的:
事件
(
Events
)
一个单位进入能量圆范围内
环境(
Conditions
)
<
/p>
进入的单位的类别是
“
小精灵
”
动作
(
Action
s
)
把能量圆对应的英雄的控制者改为选择英雄的玩家
现在再按照写出来的触发
在地图编辑器中寻找对应的选项。
创建一个新的触发
/New
Trigger
,方法是在触发编辑器
右方的窗口中按鼠标右
键选择新
<
触发器
/New
Trigger>
,新触器发会被自动命名为
“
为命名
触发
00X”
< br>,
触发器的名字可以通过在选择触发以后按
F2
来修改。
然后点击新建的那个触发,
在右下方的
触发编辑窗口中鼠标右键,选择
新事件
/New
Event
,在出现的选单中选择
单
位
-
单位进入区域
/Unit - Unit Enters
Region
,接着点击红色字体部分
-
选择区域
/- Select <
/p>
Region
,这时候窗口会自动切换到大地图,要求我们选择一
个区域,这里要解释一下在魔
兽中,我们平时所看见的例如进入能量圆,或者进入花园,
进入洞穴诸如此类
“
进入某个地
点
p>
”
的情况,其实并不是进入了我们看见的地方,而是进入了事先放置
在能量圆,花园,洞
穴等位置上的一个区域(
Region
p>
)
。而现在我们要做的正是放置这么一个区域并且在事件中
选择他作为小精灵进入的区域,在大地图上可以看见
< br>面板已经自动切换到区域面板(直接
打开区域面板的快截键是
R
)
,点击面板上坐标样的按钮使之处于按下的状态,按住
右键拖
动鼠标在能量圆上画一个和能量圆大小差不多的区域出来,
再次点击面板上的按钮使之处于
弹起的状态,
然后点选刚才放
置的区域,
会自动切换回触发编辑窗,
红色字体部分也会被刚<
/p>
才所选的区域的名字取代,连续确定
2
次
,事件便做好了。
接着是环境
/Co
ndition,
选择
<
新环境
-
单位类型判断
/New Conditions - Unit
Type Comparison>,
将进入区域的单位类型
限
制为
“
小精灵
”
其中
Entering
Unit
p>
的意思是
“
进入单位
”
这里指进入区域的单位,
Equal
to
的意思是
“
等同于
”
。
最后是动作
/Actions,
在这里先整理一下有哪些动作需要执行:
1
,由
于选择好英雄以后小精灵会消失,所以在动作的开头
要从游戏中移除小精灵。
2
,更改被
选英雄所属的势力为玩家操纵的势力。
3
,将选好的英雄移动到指定位置,也就是
3C
中的
基地。
4
,
由于英雄只能被选择一次,
所以在动作的最后要
关闭整个触发使之不再执行。
对
应以
上
4
条的动作分别是:
1
,
新动作
-
单位
-
移除
-
从游戏中移除进入单位
/New Action
- Unit - Remove - Unit - Remove
(Entering unit) from the game
2
,
<
新动作
-
单位
-
改变
拥有者
-
改变恶魔猎人的拥有者为进入单位的拥有者并且改变颜色<
/p>
/New
Action
-
Unit
-
Change
owner
- Unit
-
Change
ownership
of Demon
Hunter
0002
to
(Owner
of
(Entering unit)) and Change color
3
,新动作
-
单位
-
移动
-
移
动恶魔猎人到区域
001
的
中心
/New Action - Unit - Move Demon Hunter
0002
001
当然区域
001
也是自己创建的区域;
4
,新动作
-
触发
-
关闭此触发
/New
Action
- Trigger - Turn off (This trigger)
这样整
个触发就完成了,对照这个触发再将选择另
外
2
个英雄的也完成。最后保存地图,保存的时候会提醒你为每个势力放置开始点,如果
没有放置,
会自动为你在地图任意区域放置,
手动放置的方
法是在单位面板中选择开始点的
图标然后进行放置。
保存地图以
后按
Ctrl + F9
测试一下吧
~
。
另外别忘记在菜单栏设定
-
玩
家
/Scenario - Pla
yer>
中将势力
2
和
3
的控制者设置为玩家
/User
,
否则在游戏里就不能选择
势力
2
,
3
了。
<
/p>
刷兵(有的地方把这个叫做孵蛋,我完全不能理解
…………
)
。简单解释就
是每隔一定时间产生一些单位
在基地附近,那么废话不多说,下面开始介绍怎样制作。
大<
/p>
家都知道在
3C
中兵是每隔一定时间就会
自动产生的,在触发器中,我们将这种每隔固定时
间就会自动发生一次的事件叫做
“
周期性事件
”
,<
/p>
一般来说经常通过以下两种途径来实现事件
的
周
期
发
生
:
==========================
方
法
1==============
===========================
第一种是通过触发器中的
循环事
件来实现的
(也有将这个叫做回圈的)
< br>,在触发器中新建一个
Action
(动作)
,
在下拉菜单中
找到这样的句子
< br>——
For Each Integer A,Do Multiple Act
ions
(对于所有的整数数值
A
,<
/p>
执行
若干动作)
,
点击确定以后会看见在
Actions
(
动作)
这个类下面已经增加了这样的一个
Action
p>
(动作)
:
For each (Integer A) from 1 to 10, do
(Actions) Loop - Actions
(对于所有的整
数值
A
,
从
< br>1
到
10
,
执行动作
循环
-
动作)
我详细解释一下这个
Action
的作用,
For each
(Integer A) from 1 to 10
(对于所有的整数值
A
,从
1
到
10
)的意思是重复执行
p>
10
次
Loop
- Actions
(循环
-
动作)中指定的
Actions<
/p>
(动作)
,同样的道理如果将后面的
fr
om 1 to 10
(从
1
到
10
)改成
from 1 to 20
(从
1
到
20
)那么就
会重复执行
20
次动作,假设是
from
5
to 10
则只会执行
5
次动作,至于
为什么不直接用
from 1 to
5
来代替
from 5 to
10
,这是
在某些时候必须
用到的功能,至于具体使用的时机,为了不使大家头脑混乱,现在暂时不
做
解
释
,
等<
/p>
到
实
际
使
用
中
遇
到
类
似
情
况
再
做
说
明
。
------------------------
--
范
例
-------------
------------------------
现在为了更形象的说明这个功能
,
我们来做个简单的范例,
按
F4
p>
打开触发器编辑器,新键一个
Event
(
事件)
:
Player - Player 1 (Red)
skips a cinematic
sequence“
玩家
-
玩家
1
(红色)跳过一段电影序列
”
,这个事
件的建立方法是鼠标右键
-
New
Event
(新事件)
-
Player
(玩家)
-
Cinematic Skipped
(电影被跳过)
,这个事
件的
作用是当玩家
1
按下
ESC
键的时候就会触发动作。
接着增加一个动作<
/p>
For each (Integer A)
from 1 to 10, do (Actions) Loop -
Actions
这样就将需要重复执行动作的次数定为
10<
/p>
次,
然
后在
Lo
op
-
Actions
下面依次添
加这些动作:
Game
-
Display
to
(All
players)
the
text:
(String((Integer A)))
(游戏
-
向所有玩家显示信息
:
将作为循环序列的整数
A
的值转换
为字符串类型
[
关于数据类型,这里不多做解释,大家只需要知道只有字符串类型的数据才
能被作为信息显示出来就可以了
]
。
在这里
“
作为循环序列的整数
A”
其实就是用来记录已经重
复执行了多少次动作的一个数值
。
)添加这个动作的顺序为
New
Action
(新动作)
-
Game
(游戏)
-
TextMessage(Auto-
Timed)
(显示信息,自动调整信息显示时间)
Wait
1.00
seconds
(等待
1.00
秒,这样在每次执行动
作以后都会间隔
1
秒才执行下一次动作)添加
< br>这个动作的顺序为
New
Action
(新动作)
-
All
(所有)
-
Wait
(等待)
。
然后在整个循环
Action
(动作)
的后面
(注意,
是在整个
Fo
r Each Integer
的后面,
不要添加到
Loop - Actions
下面去了)添加这个
Action
(动作)
:
Game - Display to (All players) the
text: (finish)
作
用是在整个循环结束以后显
示一句话以标明循环结束了。
当然其中的
finish
大家可以随自己
爱好随意更改。
最后将
Melee Initialization
(地图初始化)这个触发删除掉,在地图上放置
玩家开始点,按
Ctrl + F9
进游戏测试,可以看见在游戏中当按下
ESC
键以后会分
10
次每<
/p>
秒一次依次显示数字
1~10
,
最后则会显示
finish
。
< br>通过这个例子可以很清楚的看出。
For each
(Integer A) from 1 to 10, do
(Actions)
这个动作可以让位于
Loop - Act
ions
下面的动作重复
执行
from
1 to 10
中后面数字
+1
减去前
面数字的次数,而当所有的重复次数被执行完毕以
后,
则会继续
执行整个循环后面的动作。
这样就很简单方便的实现了周期性事件的执行,
但
是用这个
Action
(
动作)
实现的周期性事件有两个弊端,第一是循环执行的次数有限,大家
也看见了,在这个
Action
中无论如何也要求输入
2
个数字以确定执行次数;第二是每次执
行动作之间的时间间隔有最小限制,在上面的例子中,大家将
Wait
1.00
seconds
(等待
p>
1
秒)改为
Wait 0.00 seco
nds
(等待
0
秒)以后进入游戏测试
,会发现即使是
0
秒,也会有
微小的等
待时间(大概
0.1~0.4
秒左右,视电脑配置而定)
,这样在执行某些重复时间间隔
很小的周期性事件的时候,
就完全无法实现了,
对于必须排除以上两种限制的周期事件,
就
必须用到另外一种方法,
periodic ev
ent
(周期循环事件)
,和
For
each Integer
不同的是,
这是一个
Event
(事件)而不是一个
Action
(动作)
。
====
======================
方法
2===
======================================
添加这个事件的方法
:New
Event
(新事件)
- Time
(时间)
- Periodic Event
(周期事件)
,添加完成以后可以看见在
Event
这一类下面出
现了这样的
Event
(事件)
:
p>
Time - Every 1.00 seconds of
game time
(时间
-
每
p>
1.00
秒游戏时间)作用很明显,就是每
1
秒都会执行一次
Actions
(动
作)中包
含的所有动作,
Every 1.00 second
s
中的数字用于指定每多少秒执行动作。
对于这个事件的
功
能
,
我
们
仍
然
可
以
用
1
个
简
单
的
范
例
来
说
明
。<
/p>
--------------------------
p>
范
例
-----------------
--------------------
新建一个触发器,
Event
(事件)就用上面那个事件,将
1.00
调整为
0.50
,
也就
是每
0.5
秒执行
1
< br>次,
然后按下
Ctrl+B
打开
变量编辑面板,
(由于变量是
第一次接触,
所以我暂时不详细说明,
大家按照我说的做就是了,
以后会
对变量和数据类型
做详细介绍。
)点击面板上方的绿叉按钮,在
出现的窗口中下方的下拉菜单选择
Integer
(整
数)然后在上面的输入栏中为这个变量随便起一个名字,
[
图:
]
这里我用的名字是
i
1
便于下面统一介绍,这样就建立好了一个类型为
“
整数
”
型的变量。暂时将这个变量放在这里