#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# RPGMaker VX Sprite浮动文字系统 by Spacesoft
# 本系统用于在RPGMaker VX环境下方便快捷地产生浮动文字。所生成的浮动文字为
# Sprite的子类,并提供一个Scene_Base类下的方法快捷产生浮动文字。支持浮现、
# 渐隐和移动。目前暂时只能显示单行字符,其他功能还在开发中~
# 输入字符支持“/字母[数字]"格式的一些属性设定,具体见函数说明。
#
# - MyFloatingText
#------------------------------------------------------------------------------
# 浮动文字类
# 版本:0.9 beth
# 作者:Spacesoft
#------------------------------------------------------------------------------
# 全部文件:
# ┗★MyFloatingText
# ┗ MyTempFloatingText
# ┗ MyScene_Base
#
#┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
class MyFloatingText < Sprite
#--------------------------------------------------------------------------
# * 物件初始化
# x : 視窗X座標
# y : 視窗Y座標
# text : 要显示的文字内容
# 属性设定字:
# 字号设定/p[n]
# 颜色设定/c[n]
# 粗体设定/b[n]:0为普通,1为斜体,其它无效
# 斜体设定/i[n]:0为普通,1为斜体,其它无效
# 阴影设定/s[n]:0为无阴影,1为有阴影,其它无效
# 字体设定/f[n]
# 字符"/"被用作转义符,想要显示"/"请输入"//"
# 暂不支持换行符,不能多行显示
# 示例:$scene.floating_text(100,100,"示例/c[2]文/p[50]字",0,0,100,1)
#--------------------------------------------------------------------------
def initialize(x,y,text)
super()
self.x=x
self.y=y
#计算bitmap的大小,因此只需要对字号大小进行判断
text_copy=text.downcase
dummy_bitmap=Bitmap.new(1,1)
size_x=0
size_y=0
while text_copy!=""
if text_copy.slice!(/^\/([pcbisf])\[([0-9]+)\]/)!=nil #匹配成功
case $1
when "p" #是字号设定\\p[n]
dummy_bitmap.font.size=$2.to_i
else
end
elsif text_copy.slice!(/^\/\//)!=nil #字符"//"变为"/"
size_x+=dummy_bitmap.text_size("/").width
if dummy_bitmap.text_size("/").height>size_y
size_y=dummy_bitmap.text_size("/").height
else
end
elsif text_copy.slice!(/^\//)!=nil #字符"/"消掉
else #普通字符
text_copy.slice!(/^(.)/) #削下一个字符
size_x+=dummy_bitmap.text_size($1).width
if dummy_bitmap.text_size($1).height>size_y
size_y=dummy_bitmap.text_size($1).height
else
end
end
end
dummy_bitmap.dispose
#按照上面求出的大小绘制Bitmap
text_copy=text.downcase
text_bitmap=Bitmap.new(size_x,size_y)
#字符转义
#判断是否为字号设定/p[n]
#判断是否为颜色设定/c[n]
#判断是否为粗体设定/b[n]
#判断是否为斜体设定/i[n]
#判断是否为阴影设定/s[n]
now_start_x=0 #目前x坐标起始位置
now_start_y=0 #目前y坐标起始位置
while text_copy!=""
if text_copy.slice!(/^\/([pcbisf])\[([0-9]+)\]/)!=nil #匹配成功
case $1
when "p" #是字号设定/p[n]
text_bitmap.font.size=$2.to_i
when "c" #是颜色设定/c[n]
text_bitmap.font.color=text_color($2.to_i)
when "b" #是粗体设定/b[n]
case $2.to_i
when 0
text_bitmap.font.bold=false
when 1
text_bitmap.font.bold=true
else
end
when "i" #是斜体设定/i[n]
case $2.to_i
when 0
text_bitmap.font.italic=false
when 1
text_bitmap.font.italic=true
else
end
when "s" #是阴影设定/s[n]
case $2.to_i
when 0
text_bitmap.font.shadow=false
when 1
text_bitmap.font.shadow=true
else
end
when "f" #是字体设定/f[n]
if Font.default_name[$2.to_i]!=nil
text_bitmap.font.name=Font.default_name[$2.to_i]
end
else
end
elsif text_copy.slice!(/^\/\//)!=nil #字符"//"变为"/"
char_width=text_bitmap.text_size("/").width
char_height=text_bitmap.text_size("/").height
text_bitmap.draw_text(now_start_x,size_y-char_height,char_width,char_height,"/",0)
now_start_x+=char_width
elsif text_copy.slice!(/^\//)!=nil #字符"/"消掉
else #普通字符
text_copy.slice!(/^(.)/) #削下一个字符
char_width=text_bitmap.text_size($1).width
char_height=text_bitmap.text_size($1).height
text_bitmap.draw_text(now_start_x,size_y-char_height,char_width,char_height,$1,0)
now_start_x+=char_width
end
#p text_copy
#text_bitmap.draw_text(100,0,10,20,"i",0)
end
#text_bitmap.draw_text(100,0,10,20,"i",0)
self.bitmap=text_bitmap
#self.bitmap = @animation_bitmap1
end
def text_color(n)
x = 64 + (n % 8) * 8
y = 96 + (n / 8) * 8
windowskin = Cache.system("Window")
return windowskin.get_pixel(x, y)
end
end