本帖最后由 余烬之中 于 2013-11-3 13:48 编辑
其实这是我计划上周做的项目…………可是因为种种原因,只做了一半就拖到了现在……
——————
@喵呜喵5 不是自动换行……那个早就实现了【书籍系统 http://rpg.blue/thread-337128-1-1.html 】
我现在要做的是调用精灵(感觉我学的很没有章法……因为也没有什么教程,前不久才知道这是ruby…………)
在Window_Base里有(这两个不是重点):
#-------------------------------------------------------------------------- # ● 获取行高 #-------------------------------------------------------------------------- def line_height return 24 end
#--------------------------------------------------------------------------
# ● 获取行高
#--------------------------------------------------------------------------
def line_height
return 24
end
#-------------------------------------------------------------------------- # ● 计算窗口显示指定行数时的应用高度 #-------------------------------------------------------------------------- def fitting_height(line_number) line_number * line_height + standard_padding * 2 end
#--------------------------------------------------------------------------
# ● 计算窗口显示指定行数时的应用高度
#--------------------------------------------------------------------------
def fitting_height(line_number)
line_number * line_height + standard_padding * 2
end
重点在这里
#-------------------------------------------------------------------------- # ● 计算行高 # restore_font_size : 计算完成后是否恢复原本的字体尺寸? #-------------------------------------------------------------------------- def calc_line_height(text, restore_font_size = true) result = [line_height, contents.font.size].max last_font_size = contents.font.size text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc| make_font_bigger if esc == "\e{" make_font_smaller if esc == "\e}" result = [result, contents.font.size].max end contents.font.size = last_font_size if restore_font_size result end
#--------------------------------------------------------------------------
# ● 计算行高
# restore_font_size : 计算完成后是否恢复原本的字体尺寸?
#--------------------------------------------------------------------------
def calc_line_height(text, restore_font_size = true)
result = [line_height, contents.font.size].max
last_font_size = contents.font.size
text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc|
make_font_bigger if esc == "\e{"
make_font_smaller if esc == "\e}"
result = [result, contents.font.size].max
end
contents.font.size = last_font_size if restore_font_size
result
end
滚动文字窗口中是这样的
#-------------------------------------------------------------------------- # ● 更新绘制所有内容所需的高度 #-------------------------------------------------------------------------- def update_all_text_height @all_text_height = 1 convert_escape_characters(@text).each_line do |line| @all_text_height += calc_line_height(line, false) end reset_font_settings end
#--------------------------------------------------------------------------
# ● 更新绘制所有内容所需的高度
#--------------------------------------------------------------------------
def update_all_text_height
@all_text_height = 1
convert_escape_characters(@text).each_line do |line|
@all_text_height += calc_line_height(line, false)
end
reset_font_settings
end
它会先调用convert_escape_characters
所以在这个方法中加上换行就可以了(很繁琐,先绘制一遍再保存,效率更是渣,不过用起来倒不会卡,也不显得慢,如果不死认脚本,人类是察觉不到的) |