love2d教程28--血条
感谢网友朱大仙提供的代码,这才有了这篇博客。
血条(至于体力、法力都是类似的)是游戏里常用的gui控件,它主要实现两个功能:增加、减少。
效果如图:(没有录制gif)

血条的绘制可以使用love里的一些绘图函数,还可以用图片填充。这里采用图片bloodlineb.png填充,
同时这个图片也是一个quad的序列图,用它来组成血条的起始、中间、结束。
增加和减少控制好绘制时的坐标就可以了,其中键“q”增加,“w”键减少,完整的代码如下:
blood.lua
HM={hp=200,hps=200,maxhp=200,zt='N',x=20,y=20,w=200,h=30,brea=false}
local cover=love.graphics.newImage('bloodlineb.png')
local aq= love.graphics.newQuad(0,0,20,30,60,30)
local bq= love.graphics.newQuad(20,0,20,30,60,30)
local cq= love.graphics.newQuad(40,0,20,30,60,30)
function HM:new(o)
o = o or {} --如果参数中没有提供table,则创建一个空的。
--将新对象实例的metatable指向表(类),这样就可以将其视为模板了。
setmetatable(o,self)
--在将__index字段指向自己,以便新对象在访问函数和字段时,可被直接重定向。
self.__index = self
--最后返回构造后的对象实例
return o
end
function HM:update(dt)
if self.zt=='N' then
if self.hp<self.hps then
self.hps=self.hps-dt*30
end
elseif self.zt=='add' then
if self.brea then
self.zt='N'
elseif self.hp<self.hps then
local newhp=self.hp+dt*30
if newhp>self.hps then
self.hp=self.hps
self.zt='N'
else
self.hp=newhp
end
end
end
end
function HM:add(val)
if (self.hp+val)>self.maxhp then
self.hps=self.maxhp
self.zt='add'
elseif self.zt=='add' then
if (self.hps+val)>self.maxhp then
self.hps=self.maxhp
else
self.hps=self.hps+val
end
else
self.hps=self.hp+val
self.zt='add'
end
end
function HM:sub(val)
if (self.hp-val)>0 then
self.hp=self.hp-val
else
self.hp=0
self.hps=0
end
end
function HM:draw()
--边框
love.graphics.setPointSize( 3 )
love.graphics.setColor(50,50,255)
love.graphics.rectangle("line",self.x,self.y,self.w,self.h)
--当前量
love.graphics.setPointSize( 1 )
love.graphics.setColor(20,140,100)
love.graphics.rectangle("fill",self.x,self.y,self.hps,self.h)
--最低量
love.graphics.setColor(0,255,128)
love.graphics.rectangle("fill",self.x,self.y,self.hp,self.h)
love.graphics.setColor(255,255,255)
--下面的代码分别绘制血条的起始、中间、结束
love.graphics.drawq(cover,aq,self.x,self.y)
for n=1,(self.maxhp-40)/20 do
love.graphics.drawq(cover,bq,self.x+n*20,self.y)
end
love.graphics.drawq(cover,cq,self.x+self.maxhp-20,self.y)
end
main.lua
function love.load() require 'blood' UU=HM:new(o) UU:sub(100)-- 减血 end function love.update(dt) UU:update(dt) end function love.draw() UU:draw() end function love.keypressed(key) if key=='q' then UU:add(70)-- 加血 end if key=='w' then UU:sub(70)-- 减血 end end
点击下载完整代码。
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号