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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。