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

点击下载完整代码。

posted @ 2013-05-24 15:30  半山无极  阅读(864)  评论(0编辑  收藏