目录
绕了半天,终于又回到了我们的Window_Command类。
Window_Command类代码解析
#==============================================================================
# ■ Window_Command
#------------------------------------------------------------------------------
# 一般的命令选择行窗口。
#==============================================================================
class Window_Command < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# width : 窗口的宽
# commands : 命令字符串序列
#--------------------------------------------------------------------------
def initialize(width, commands)
# 由命令的个数计算出窗口的高
super(0, 0, width, commands.size * 32 + 32)
@item_max = commands.size #当然,命令=物品(是个冷笑话) Window_Selectable.@item_max
@commands = commands #命令
self.contents = Bitmap.new(width - 32, @item_max * 32) #命令总数*行高32作为其高度 宽度-32猜测是预留空间(给光标)
refresh #刷新
self.index = 0 #初始光标指向第一个命令
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear #清除位图
for i in 0...@item_max #遍历所有命令
draw_item(i, normal_color) #绘制命令
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
# color : 文字色
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
rect = Rect.new(4, 32 * index, self.contents.width - 8, 32) #4应为边距
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) #填充矩形 #但是它用的是一个透明度为0的颜色,所以不会显示出颜色来
#为什么要执行这一步呢
self.contents.draw_text(rect, @commands[index]) #绘制文字
end
#--------------------------------------------------------------------------
# ● 项目无效化
# index : 项目编号
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color) #如果是无效命令就以无效颜色绘制
end
end
关于Window_Command类的实例
我截几个图,红圈部分就是这个类的实例窗口:
其中图一就是Scene_Title里实例化的命令窗口,也就是标题界面的命令窗口。此时回看Scene_Title内关于标题窗口的代码:
s1 = "新游戏"
s2 = "继续"
s3 = "退出"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
声明了一个命令窗口并传入一个描述命令的数组,然后重设其透明度和坐标,使其出现在窗口的中间下方。