作者:
盗帅冬瓜 ♂
画敌人HP/SP条的方法(教程+范例)!
原贴转自:http://bbs.rpgchina.com/read-htm-tid-18189.html
画敌人HP/SP条的方法(教程+范例)。
估计大家将血条脚本“插入Main前”都用惯了,所以我估计这个教程可能对部分人没有什么意义,这个算是想学的人可以学,不想学的人就不学的那种。。。(PS:其实拿范例工程里面的Window_Help直接覆盖原来的即可得到效果)不过我个人认为,了解血条的画法很重要,而且也不难。这次就拿画敌人HP/SP条为例(我自己也是刚学会不久的,所以有什么问题请提醒我纠正)。
因为是要在显示敌人名字的窗口显示,所以应该在脚本Window_Help那里改。
在脚本Window_Help第49行,有如下内容:
#--------------------------------------------------------------------------
# ● 设置敌人
# enemy : 要显示名字和状态的敌人
#--------------------------------------------------------------------------
def set_enemy(enemy)
text = enemy.name
state_text = make_battler_state_text(enemy, 112, false)
if state_text != ""
text += " " + state_text
end
set_text(text, 1)
end
end
将这个重新定义为:
def set_enemy(actor)
self.contents.clear
draw_actor_name(actor, 4, 0)
draw_actor_state(actor, 140, 0)
draw_hp_bar(actor, 284, 0)#HP显示
draw_sp_bar(actor, 460, 0)#SP显示
@text = nil
self.visible = true
end
这样子设定其实是仿造第33行设置角色的方法,这样才可以办到显示HP/SP。
然后就进入了重要部分。。。
具体的血条画法:
在之前已经有了
draw_hp_bar(actor, 284, 0)
draw_sp_bar(actor, 460, 0)
这段内容,就是定义血条的画法,就先拿HP条的画法来举例吧。
这个是画成之后的脚本,各个部分的作用都已经注明:
def draw_hp_bar(actor,x,y)
width = 128#定义血条的长度
white = Color.new(255,255,255,200)#定义白色,这是为了方便以后的运用。
black = Color.new(0,0,0,200)#定义黑色,这也是为了方便以后的运用。
w = width * actor.hp / actor.maxhp#定义宽度的算法,当然是按HP百分比计算。
self.contents.font.color = Color.new(255, 255, 0, 255)#字体颜色,我设为黄色。
#白色边框(其实应该是背景色),这里要说明的是其实各种形状的血条都是由
#self.contents.fill_rect(之前定义的x坐标, 之前定义的y坐标, 血条长度, 血条高度, 颜色)
#这个指令画出来的,不同形状的血条也是根据许多这样的一行行指令做成的。
self.contents.fill_rect(x+1, y+11, width-2, 1, white)
self.contents.fill_rect(x, y+12, width, 1, white)
self.contents.fill_rect(x-1, y+13, width+2, 9, white)
self.contents.fill_rect(x, y+22, width, 1, white)
self.contents.fill_rect(x+1, y+23, width-2, 1, white)
#如果只是到这里就停止了,不妨让我们看看效果:白色边框
#黑色背景,和白色边框一样,也使用相同方法画出的,但是要稍微小一点。
self.contents.fill_rect(x+2, y+12, width-4, 1, black)
self.contents.fill_rect(x+1, y+13, width-2, 1, black)
self.contents.fill_rect(x, y+14, width, 7, black)
self.contents.fill_rect(x+1, y+21, width-2, 1, black)
self.contents.fill_rect(x+2, y+22, width-4, 1, black)
#现在再看看效果:黑色背景
#其实从这里已经可以看出,血条的画法其实是有很多层颜色套在一起合成,越后写的越优先。
#RP颜色计算法,这个是非常重要的地方,这样你的血条才有颜色。
val = 255 * ((actor.hp*100)/actor.maxhp)#颜色变化算法
green = 255 - val/100#这里主要变化的是绿色,血越少,绿色越多,这样导致血条颜色变化。
color = Color.new(225,green,0,200)#颜色
top_color = Color.new(255,green+32,96,200)#顶上的颜色,作为渐变色出现(好看)。
bottom_color = Color.new(172,green,0,200)#底下的颜色,作为渐变色出现(好看)。
#画血条,算完颜色后总要把血条画上吧?
self.contents.fill_rect(x+2, y+12, w-4, 1, top_color)
self.contents.fill_rect(x+1, y+13, w-2, 1, top_color)
self.contents.fill_rect(x, y+14, w, 7, color)
self.contents.fill_rect(x+1, y+21, w-2, 1, color)
self.contents.fill_rect(x+2, y+22, w-4, 1, bottom_color)
#现在再来看看效果: RP血条
#写上HP两个大字,这样就更完美了,哦活活活活。。。
self.contents.draw_text(x,y,128,32,"我叫HP",1)
end
这样就华丽的画完了,现在再来看看效果: 文字表示
在将这个复制一遍,然后造出SP条(其实就是把所有hp改成sp,再改改颜色算法):
def draw_sp_bar(actor,x,y)
width = 128
white = Color.new(255,255,255,200)
black = Color.new(0,0,0,200)
w = width * actor.sp / actor.maxsp
self.contents.font.color = Color.new(255, 255, 0, 255)
#白色边框
self.contents.fill_rect(x+1, y+11, width-2, 1, white)
self.contents.fill_rect(x, y+12, width, 1, white)
self.contents.fill_rect(x-1, y+13, width+2, 9, white)
self.contents.fill_rect(x, y+22, width, 1, white)
self.contents.fill_rect(x+1, y+23, width-2, 1, white)
#黑色背景
self.contents.fill_rect(x+2, y+12, width-4, 1, black)
self.contents.fill_rect(x+1, y+13, width-2, 1, black)
self.contents.fill_rect(x, y+14, width, 7, black)
self.contents.fill_rect(x+1, y+21, width-2, 1, black)
self.contents.fill_rect(x+2, y+22, width-4, 1, black)
#RP颜色计算法
val = 255 * ((actor.hp*100)/actor.maxhp)
green = 255 - val/100
color = Color.new(0,green,255,200)
top_color = Color.new(96,green+32,255,200)
bottom_color = Color.new(0,green,172,200)
#画气条
self.contents.fill_rect(x+2, y+12, w-4, 1, top_color)
self.contents.fill_rect(x+1, y+13, w-2, 1, top_color)
self.contents.fill_rect(x, y+14, w, 7, color)
self.contents.fill_rect(x+1, y+21, w-2, 1, color)
self.contents.fill_rect(x+2, y+22, w-4, 1, bottom_color)
#写上SP两个大字
self.contents.draw_text(x,y,128,32,"我叫SP",1)
end
end#最后别忘记end这个脚本,不然要出错。
完美的画完了HP/SP条后的最终效果:
最终效果
也可以套用樱雅在土的画法,画出横向渐变色的HP/SP条,画法稍有差异,效果:
横向渐变色版
今天再次优化了一下效果:
横向渐变色版(较好看)
也可以这样,dcf大叔订做的:
横向渐变色版(中间变窄)
好了,全部完成了,这个画血条的方法也能用在许多窗口里,只要灵活变通改坐标即可。
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |