love2d教程28--血条
2013-05-24 15:30
363 查看
感谢网友朱大仙提供的代码,这才有了这篇博客。
血条(至于体力、法力都是类似的)是游戏里常用的gui控件,它主要实现两个功能:增加、减少。
效果如图:(没有录制gif)
血条的绘制可以使用love里的一些绘图函数,还可以用图片填充。这里采用图片bloodlineb.png填充,
同时这个图片也是一个quad的序列图,用它来组成血条的起始、中间、结束。
增加和减少控制好绘制时的坐标就可以了,其中键“q”增加,“w”键减少,完整的代码如下:
blood.lua
main.lua
点击下载完整代码。
血条(至于体力、法力都是类似的)是游戏里常用的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
点击下载完整代码。
相关文章推荐
- lua & love2d 简单入门教程
- love2d教程19--背包修正
- love2d教程18--物理引擎2
- love2d教程9--角色移动
- love2d教程12--画布和批量绘图
- love2d教程26--对话条
- love2d教程6--摄相机2边界和图层
- love2d教程7--绘图顺序
- love2d教程13--图形界面
- love2d教程1--最小的love2d程序
- love2d教程5--摄相机1视角跟随玩家
- love2d教程11--着色器
- love2d教程2--绘图和文字
- love2d教程3--输入和音乐
- love2d教程20--UDP网络连接
- love2d教程34--thread模块
- love2d教程22--金庸群侠资源格式解析1
- love2d教程4--材质和贴图
- love2d教程8--动画
- love2d教程16--简单拼音中文输入法