【二:基本的高地实现】
本贴主要讨论的内容,就是利用上述图块中的高地图块,大致包括这些:


如何实现这样一个基本的高地呢?


第一步自然是放图块,建议在可以实现的情况下放在尽可能低的图层,比如在这个示例中,找到相应的图块后,将整个高地画在第二层是没有问题的。


第一层绘制地面图块,第二层就可以绘制这种高地。
宝石放在事件层,没什么好说的。
但对于魔塔常见的地图而言,如果假设这个高地上的6个格子都允许角色行走的话,新建工程对于该图块的默认设置就是有问题的,需要修改一些图块的四方向通行和优先级,比如,需要修改这三个图块:


将其优先级改成


通行:4方向也要改,从


改成


修改之后这个高地就正确了。
除此之外还有一个问题,就是7630改中并没有所谓的“高地判断”,也就是位于高地外面的角色仍然可以触碰来触发高地上的事件,反过来,高地上的角色仍然可以触发高地下相邻的事件。
这在使用高地的地图里是不合理的,需要修改脚本。
打开脚本编辑器,找到▲●game_player中的【接触事件启动判定】,改成这样:
(本段脚本来源:火燃法影)


(文字版脚本将在之后给出)
修改之后,就可以实现只有在高地上才能触发这个宝石事件了。
这里需要注意新脚本与原脚本的差异,364-367行是对角色所面向的图块的四方向通行度的判定(别忘了后面应有的end)。
仅仅这样修改的话也有一点问题,就是所有的位于不可通行图块上的,原本可以通过接触来触发的事件,全都无法触发(典型的例子,如果有放在桌子上的书,将无法通过接触事件来调查)。
一种解决的思路是通过开关控制,某些情况下(需要实现高地的情况下)允许上述判定,其他的情况下不允许。这里就不展开讲如何写这样的脚本了。
脚本:
#--------------------------------------------------------------------------
# ●接触事件启动判定
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
result = false
xd = @direction
xd = xd == 6 ? 4 : xd == 4 ? 6 : xd == 2 ?8 : xd == 8 ? 2 : 0
if $game_map.passable?(x,y,xd) and
$game_map.passable?($game_player.x,$game_player.y,$game_player.direction)
if $game_system.map_interpreter.running?
return result
end
# 全事件的循环
for event in $game_map.events.values
# 事件坐标与目标一致的情况下
if event.x == x and event.y == y and[1,2].include?(event.trigger)
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and notevent.over_trigger?
event.start
result = true
end
end
end
end
return result
end