脚本将Window_Help(物品/技能介绍窗口,帮助窗口)从单行显示改成三行显示,满足物品说明文字比较多需要换行的需要。书写物品/技能说明时使用"\n"来进行换行。
因为这个脚本更改了物品/技能介绍窗口的大小,所以需要变动大量窗口坐标。脚本在尽量不破坏原来窗口布局的前提下进行修改,以下首先罗列出所有需要变动坐标的模块:
Window_Skill 初始化initialize过程中:
super(0, 192, 640, 288)
# 战斗中的情况下将窗口移至中央并将其半透明化
if $game_temp.in_battle
self.y = 128
self.height = 192
self.back_opacity = 160
end
Window_SkillStatus 初始化initialize过程中
super(0, 128, 640, 64)
Window_Item 初始化initialize过程中
super(0, 128, 640, 352)
# 战斗中的情况下将窗口移至中央并将其半透明化
if $game_temp.in_battle
self.y = 128
self.height = 192
self.back_opacity = 160
end
Window_EquipLeft 初始化initialize过程中
super(0, 128, 272, 192)
Window_EquipRight 初始化initialize过程中
super(272, 128, 368, 192)
Window_EquipItem 初始化initialize过程中
super(0, 320, 640, 160)
Window_ShopCommand 初始化initialize过程中
super(0, 128, 480, 64)
Window_ShopBuy 初始化initialize过程中
super(0, 192, 368, 288)
Window_ShopSell 初始化initialize过程中
super(0, 192, 640,288)
Window_ShopNumber 初始化initialize过程中
super(0, 192, 368, 288)
Window_ShopStatus 初始化initialize过程中
super(368, 192, 272, 288)
Scene_Shop 主要main过程中
# 生成金钱窗口
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 128
# 生成时间窗口(注:这里是空窗口……翻译过来是时间窗口不明白为什么……)
@dummy_window = Window_Base.new(0, 192, 640, 288)
Scene_File 主要main过程中
# 生成帮助窗口
@help_window = Window_Help.new
@help_window.height = 64
然后,删除原来的Window_Help脚本块,添加新的脚本块GPRA_Window_Help
补充:
发现一个比较严重的问题,不知道为什么没有人发现……
记录的时候那个标题框会很诡异……请做以下更改……
方法1
Scene_File 主要main过程中
# 生成帮助窗口
@help_window = Window_Help.new
@help_window.height = 64
# 这里加一句
@help_window.contents.x=-32
方法2(可能好一点)
Ctrl+Shift+F寻找标题栏的字串作成过程,搜索的字串是"文件",然后在后面写个+"\n\n",因为增加了上下自动对齐功能,所以要在首行显示文字只能这样……
脚本内容
#==============================================================================
# ◎ GPRA_Window_Help
#------------------------------------------------------------------------------
# ◎ 特技及物品的说明、角色的状态显示的窗口加强。
#------------------------------------------------------------------------------
# 制作者:绿梨子红苹果
# 个人主页:vbgm.9126.com
# E-Mail:xhy.01@163.com
# QQ:42378361
#==============================================================================
class Window_Help < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 128)
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# ● 设置文本
# text : 窗口显示的字符串
# align : 对齐方式
#--------------------------------------------------------------------------
def set_text(text, align = 0)
# 如果文本和对齐方式的至少一方与上次的不同
if text != @text or align != @align
# 清空原来的文字内容
self.contents.clear
# 设置颜色为默认颜色
self.contents.font.color = normal_color
# 定义变量记录文字行数
l=0
# 定义数组分别记录每行文字内容
s=["","",""]
# 利用临时变量存储text内容
temp=text.dup
# 首先处理文本,将"\\n"全部替换成换行符"\n"
temp.gsub!(/\\n/) { "\n" }
# c 获取 1 个字 (如果不能取得文字就退出循环)
while ((c = temp.slice!(/./m)) != nil)
# 另起一行文字的情况下
if c == "\n"
# 当超过3行时(0行开始,所以这里是2)
if l >= 2
# 退出循环体
break
end
# 否则l自增1
l += 1
end
# 不是换行符的其他情况
s[l]=s[l]+c
end
# 根据文字的行数进行不同的绘制
case l
when 0
self.contents.draw_text(4, 32, self.width - 40, 32, s[0], align)
when 1
self.contents.draw_text(4, 16, self.width - 40, 32, s[0], align)
self.contents.draw_text(4, 48, self.width - 40, 32, s[1], align)
when 2
self.contents.draw_text(4, 0, self.width - 40, 32, s[0], align)
self.contents.draw_text(4, 32, self.width - 40, 32, s[1], align)
self.contents.draw_text(4, 64, self.width - 40, 32, s[2], align)
end
# 保存此次绘图时的参数值
@text = text
@align = align
@actor = nil
end
# 可见状态为真
self.visible = true
end
#--------------------------------------------------------------------------
# ● 设置角色
# actor : 要显示状态的角色
#--------------------------------------------------------------------------
def set_actor(actor)
if actor != @actor
self.contents.clear
draw_actor_name(actor, 4, 0)
draw_actor_state(actor, 140, 0)
draw_actor_hp(actor, 284, 0)
draw_actor_sp(actor, 460, 0)
@actor = actor
@text = nil
self.visible = true
end
end
#--------------------------------------------------------------------------
# ● 设置敌人
# enemy : 要显示名字和状态的敌人
#--------------------------------------------------------------------------
def set_enemy(enemy)
text = enemy.name
state_text = make_battler_state_text(enemy,false)
if state_text != ""
text += " " + state_text
end
set_text(text, 1)
end
end

