Project1
标题:
战斗信息Battlelog的背景,能否自适应宽度?
[打印本页]
作者:
shencao
时间:
2017-2-2 20:54
标题:
战斗信息Battlelog的背景,能否自适应宽度?
就是显示xx使用了xx技能的那里
我想要这个背景的宽度根据文字的多少自动适应,可以做到么?要怎么写呢?
(我是原版战斗系统~)
作者:
百里_飞柳
时间:
2017-2-2 21:44
默认的battlelog不是一行行绘制的,而且将需要显示的文字全部存入一个数组,再统一按照所有行数绘制出背景,绘制出文字
当有新的文字需要显示时,是先把文字加入数组最后一行,清除之前的东西,重新统一绘制
所以如果要改成每一行都是不同的长度的话,可以改成存入的是 [文字串,背景宽度] 的数组,再绘制背景时利用这个宽度去绘制
#==============================================================================
# 战斗信息窗口背景阴影适应字宽度
# by 老鹰
#------------------------------------------------------------------------------
# ※已测试
# -直接修改了默认 Window_BattleLog 中的文字存储数组
# -由 text 的数组 变更为 [text, text_width] 的数组
# -请放在其他修改了BattleLog的脚本前,默认若无宽度记录,取窗口宽度
#==============================================================================
class Window_BattleLog < Window_Selectable
#--------------------------------------------------------------------------
# ● 添加文字
#--------------------------------------------------------------------------
def add_text(text)
bitmap = Bitmap.new(1,1)
rect = bitmap.text_size(text) #此处获取文字显示的矩形 注意:未排除转义符的宽度
#rect.x += 1 #此处可取消注释以调整背景的xy坐标
#rect.y += 1
@lines.push([text, rect.width]) #此处调节rect.width的传入值可调整宽度
refresh
end
#--------------------------------------------------------------------------
# ● 替换文字
# 替换最后一段文字。
#--------------------------------------------------------------------------
def replace_text(text)
@lines.pop
add_text(text)
end
#--------------------------------------------------------------------------
# ● 获取最下行的文字
#--------------------------------------------------------------------------
def last_text
@lines[-1][0]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
draw_background
contents.clear
@lines.size.times {|i| draw_line(i) }
end
#--------------------------------------------------------------------------
# ● 绘制背景
#--------------------------------------------------------------------------
def draw_background
@back_bitmap.clear
@lines.size.times do |i|
@back_bitmap.fill_rect(back_rect(i), back_color)
end
end
#--------------------------------------------------------------------------
# ● 获取背景的矩形
#--------------------------------------------------------------------------
def back_rect(line_number)
temp = @lines[line_number][1] == nil ? width : @lines[line_number][1]
Rect.new(0, padding + line_number * line_height, temp, line_height)
end
#--------------------------------------------------------------------------
# ● 绘制行
#--------------------------------------------------------------------------
def draw_line(line_number)
rect = item_rect_for_text(line_number)
contents.clear_rect(rect)
draw_text_ex(rect.x, rect.y, @lines[line_number][0])
end
end
复制代码
作者:
shencao
时间:
2017-2-2 23:30
本帖最后由 shencao 于 2017-2-2 23:32 编辑
百里_飞柳 发表于 2017-2-2 21:44
默认的battlelog不是一行行绘制的,而且将需要显示的文字全部存入一个数组,再统一按照所有行数绘制出背景 ...
哇比我想象的复杂⋯⋯
已用。我把这个背景换成渐变了效果拔群!
“未排除转义符的宽度”这个确实,不过渐变的话也不太明显,某些地方我可以手动加空格来调整完全没问题~
十分感谢!
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1