您的位置:首页 > 其它

love2d教程28--血条

2013-05-24 15:30 363 查看
感谢网友朱大仙提供的代码,这才有了这篇博客。

血条(至于体力、法力都是类似的)是游戏里常用的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


点击下载完整代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: