#==============================================================================
# ■ Scene_菜单系统
#------------------------------------------------------------------------------
# 处理菜单画面的类。
#==============================================================================
class Scene_menu
#--------------------------------------------------------------------------
# ● 初始化对像
# menu_index : 命令光标的初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
# 生成活动块
@spriteset = Spriteset_Map.new
# 生成命令窗口
s1 = "对话"
@command_window = Window_窗口命令.new(200, [s1],2)
@command_window.index = 0
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果切换画面就中断循环
if $scene != self
if map_load_move_can? == false
$game_switches[19] = true
else
$game_switches[19] = false
end
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@command_window.dispose
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@command_window.update
# 命令窗口被激活的情况下: 调用 update_command
if @command_window.active
update_command
return
end
#--------------------------------------------------------------------------
# ● 刷新画面 (命令窗口被激活的情况下)
#--------------------------------------------------------------------------
def update_command
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换的地图画面
$scene = Scene_Map.new
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
when 0 # 对话
$game_system.se_play($data_system.decision_se)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
$scene = Scene_Map.new
end
return
end
end
#--------------------------------------------------------------------------
# ● 同位置的事件启动判定
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
# 事件执行中的情况下
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 triggers.include?(event.trigger)
# 跳跃中以外的情况下、启动判定是同位置的事件
if not event.jumping? and event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● 正面事件的启动判定
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
# 事件执行中的情况下
if $game_system.map_interpreter.running?
return result
end
# 计算正面坐标
new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全部事件的循环
for event in $game_map.events.values
# 事件坐标与目标一致的情况下
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
# 找不到符合条件的事件的情况下
if result == false
# 正面的元件是计数器的情况下
if $game_map.counter?(new_x, new_y)
# 计算 1 元件里侧的坐标
new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 全事件的循环
for event in $game_map.events.values
# 事件坐标与目标一致的情况下
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
end
end
return result
end