讯息窗口在生成之后,大小是没那么容易随便改的。visible_line_number方法所返回的数值只供生成窗口时使用。
你可以发现visible_line_number只有在initialize(类实例生成时所调用的一次性方法)内调用。
因此,我写了下面这个插件脚本:
class Window_Message < Window_Base def resize_window(lines = 4) return if lines <= 0 self.height = fitting_height(lines) create_contents end end class Game_Interpreter def resize_message_window(lines = 4) w = SceneManager.scene.instance_variable_get(:@message_window) return if !w w.resize_window(lines) w.update_placement end end
class Window_Message < Window_Base
def resize_window(lines = 4)
return if lines <= 0
self.height = fitting_height(lines)
create_contents
end
end
class Game_Interpreter
def resize_message_window(lines = 4)
w = SceneManager.scene.instance_variable_get(:@message_window)
return if !w
w.resize_window(lines)
w.update_placement
end
end
我给Window_Message加了一个方法,叫做resize_window(重新定义大小),参数是想要的新行数。默认参数是4,这样的直接调用resize_window不附上参数也可以,直接就是默认值。
return if lines <= 0 如果新行数为零或负数就返回,避免之后出现什么巨大错误。(你也可以移除这行,到时就会报错,可能会更好修正)
self.height = fitting_height(lines) 这行你在initialize内有看到 super(0,0,window_width,window_height)而window_height的定义是fitting_height(visible_line_number),所以应该不难理解。
create_contents 就是重新生成内容区域(其实是个图片)。这是必要的,不然会出现框弄大了可是内容仍然小的问题。
定义了这个方法之后,问题就来了。怎么调用?
如果你是有写别的脚本的,就记得调用这个新方法就是了。
如果是要从事件内透过脚本指令来调用…就在Game_Interpreter里面定义一个方法resize_message_window,参数也是那个样。
在Game_Interpreter里面所定义的方法可以直接被事件脚本指令调用。直接写 resize_message_window(20) 这样就行了。
w = SceneManager.scene.instance_variable_get(:@message_window) 这行是这么理解的:
SceneManager.scene是当前场景(不管是地图Scene_Map或者战斗Scene_Battle),instance_variable_get是一个黑科技方法,用于直接获取实例内的变量。:@message_window 就是指定要获取场景内讯息窗口的实例。
return if !w 如果窗口获取失败,得到的值是nil(空值),就返回,避免接下来的步骤出错。
w.resize_window(lines) 调用上面所说的,新定义的方法,调整显示的行数。
w.update_placement 调整窗口的坐标(可以去Window_Message看看定义),因为你调整了高度你总得把Y坐标给提高吧,不然?你移除这行试试看咯~
以上。脚本是很神奇的事物,建议阅读本区置顶的汉化版F1帮助文档内的脚本入门,然后阅读默认脚本内的绿色注释,至少要知道哪个方法是干啥的。
|