为什么命令窗口偏移了?(VX Ace)

我最近写了一个脚本,可以立即对选中的目标施放法术,然后将回合还给施法者。虽然代码能正常运行,但在触发后,选择“攻击”或“技能”命令会导致以下视觉错误。

  • 选择“攻击”:

  • 选择“技能”:

命令窗口会一直显示为“偏移”状态,直到下一回合开始,或者我按下“X”键使战斗/逃跑菜单选项出现。过去几天我一直在试图找出导致这个问题的原因,但收效甚微,因此非常感谢您的帮助。触发自动攻击的脚本如下(与问题无关的部分已省略):

class Scene_Battle < Scene_Base
def autoSend
item = BattleManager.actor.input.item
return unless item.is_a?(RPG::Skill) && item.canAutoSend
@ subjectsubject = BattleManager.actor
execute_action
process_action_end
process_event #激活可能触发的任何战斗事件。

@ status_window.unselect
@ status_window.open
@ subject.input.clear
subject = nil
prior_command #归还回合

end

我在想,即使战斗/逃跑窗口已经关闭,它是否仍然处于激活状态。在默认的 Scene_Battle 中,当队伍指令窗口激活时,update_info_viewport 会将整个底部区域向一个方向滑动;而当角色指令窗口激活时,则向另一个方向滑动。如果两者同时激活,这两次移动会在每一帧相互抵消,因此位置保持不变。

这也许能解释为什么只有在选择“攻击”或“技能”后才会出现该窗口。选择指令会使角色指令窗口失效,此时只剩下队伍指令窗口处于激活状态,从而将整个区域拉向它的一侧。按下 X 键会重新设置队伍指令窗口,而选择“战斗”则会以正常方式使其失效,这可能就是为何操作完成后该窗口消失的原因。

如果施法者是你的第一个角色,prior_command 会跳转到 start_party_command_selection,这会激活队伍指令窗口。start_actor_command_selection 仅关闭它但不会使其失效(deactivate)。因此,如果你的代码随后将角色指令交给施法者,队伍窗口可能会在后台保持激活状态。

试试这段代码,或许可以解决这个问题:

class Scene_Battle < Scene_Base
  alias autosend_start_actor_command_selection start_actor_command_selection
  def start_actor_command_selection
    @party_command_window.deactivate
    autosend_start_actor_command_selection
  end
end

非常感谢你(又帮了我一次,哈哈!)的帮助。这解决了我遇到的问题。