二、定义初始化方法(这个步骤貌似可以省去,但为防以后要用,还是写上为好),方法名不能随便乱写,如下:
[pre lang="ruby" line="1"]def initialize
p "初始化完成";
end[/pre]
注:脚本中的打印只是为了在测试中让我们知道这个类被实例化了,在完成游戏时可以将其删除。
三、编写功能方法。这个步骤非常重要。嗯。我把思想告诉大家:
首先,要获取地图的最大宽度和最大高度,用来设置随机坐标的范围,防止坐标溢出或不够。
然后,定义一个布尔变量并且初始化为false,这个布尔变量用来判定目的地是否可以通行。
接下来是循环,本例中采用while循环,条件自然是当布尔变量为false。
·在循环中,先随机取一个坐标,然后分别计算4个方向的通行性,只要有一个方向可以通行的,那么该坐标的区域就是可以通行的。
·还没完,再取该坐标的地形标识,如果等于某一个数(本例中为1),那么表示该坐标位于类似于森林里或者墙上的区域,自然也是不行的,视为不可通行。在《RMVA》中,这些区域都是可以通行的,有BUG。
只有在找到合适的坐标才能跳出循环。最后,执行传送。坐标就是正确的坐标,面向的话可以预定义(本例采用临时变量控制朝向,稍候讲解)。
脚本如下:
[pre lang="ruby" line="1"]#随机传送卷轴的功能
def Random_Send
maxX = $game_map.width;#获取当前地图的最大宽度
maxY = $game_map.height;#获取当前地图的最大高度
x = 0;#初始化一个整数变量为0,用来表示传送目的地的x坐标
y = 0;#初始化一个整数变量为0,用来表示传送目的地的y坐标
flag = false;#初始化一个布尔变量为false,用来表示传送目的地是否可以通行
while (!flag)#如果传送目的地不可通行则循环执行
x = rand(maxX) + 1;#随机设置当前地图的X坐标
y = rand(maxY) + 1;#随机设置当前地图的Y坐标
flag2 = $game_player.map_passable?(x, y, 2);#判断在2方向是否可以通行
flag4 = $game_player.map_passable?(x, y, 4);#判断在4方向是否可以通行
flag6 = $game_player.map_passable?(x, y, 6);#判断在6方向是否可以通行
flag8 = $game_player.map_passable?(x, y, 8);#判断在8方向是否可以通行
#只要4个方向中其中一个方向可以通行那么就可以通行
if (flag2 or flag4 or flag6 or flag8)
flag = true;
end
#如果当前坐标处于地形标志为1的图块里,则设置为不可通行
if ($game_map.terrain_tag(x, y) == 1)
flag = false;
end
end
#预定传送位置,准备开始传送
$game_player.reserve_transfer($game_map.map_id, x, y, $game_variables[1]);#方向采用第一号临时变量的值,稍候讲解
$game_player.perform_transfer;#进行传送
end[/pre]
#随机传送卷轴的功能
def Random_Send
maxX = $game_map.width;#获取当前地图的最大宽度
maxY = $game_map.height;#获取当前地图的最大高度
x = 0;#初始化一个整数变量为0,用来表示传送目的地的x坐标
y = 0;#初始化一个整数变量为0,用来表示传送目的地的y坐标
flag = false;#初始化一个布尔变量为false,用来表示传送目的地是否可以通行
while (!flag)#如果传送目的地不可通行则循环执行
x = rand(maxX) + 1;#随机设置当前地图的X坐标
y = rand(maxY) + 1;#随机设置当前地图的Y坐标
flag2 = $game_player.map_passable?(x, y, 2);#判断在2方向是否可以通行
flag4 = $game_player.map_passable?(x, y, 4);#判断在4方向是否可以通行
flag6 = $game_player.map_passable?(x, y, 6);#判断在6方向是否可以通行
flag8 = $game_player.map_passable?(x, y, 8);#判断在8方向是否可以通行
#只要4个方向中其中一个方向可以通行那么就可以通行
if (flag2 or flag4 or flag6 or flag8)
flag = true;
end
#如果当前坐标处于地形标志为1的图块里,则设置为不可通行
if ($game_map.terrain_tag(x, y) == 1)
flag = false;
end
end
#预定传送位置,准备开始传送
$game_player.reserve_transfer($game_map.map_id, x, y, $game_variables[1]);
$game_player.perform_transfer;#执行传送
end
end[/pre]