love2d教程28 血條

2022-05-22 16:09:11 字數 3192 閱讀 4956

感謝網友朱大仙提供的**,這才有了這篇部落格。

血條(至於體力、法力都是類似的)是遊戲裡常用的gui控制項,它主要實現兩個功能:增加、減少。

效果如圖:(沒有錄製gif)

血條的繪製可以使用love裡的一些繪圖函式,還可以用填充。這裡採用bloodlineb.png填充,

同時這個也是乙個quad的序列圖,用它來組成血條的起始、中間、結束。

增加和減少控制好繪製時的座標就可以了,其中鍵「q」增加,「w」鍵減少,完整的**如下:

blood.lua

hm= 

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 --

最後返回構造後的物件例項

returno

endfunction

hm:update(dt)

if self.zt=='n'

then

if self.hpthen

self.hps=self.hps-dt*30

endelseif self.zt=='

add'

then

if self.brea then

self.zt='n'

elseif self.hpthen

local newhp=self.hp+dt*30

if newhp>self.hps then

self.hp=self.hps

self.zt='n'

else

self.hp=newhp

endend

endend

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

endelse

self.hps=self.hp+val

self.zt='

add'

endend

function

hm:sub(val)

if (self.hp-val)>0

then

self.hp=self.hp-val

else

self.hp=0

self.hps=0

endend

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

dolove.graphics.drawq(cover,bq,self.x+n*20

,self.y)

endlove.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)

endfunction

love.draw()

uu:draw()

endfunction

love.keypressed(key)

if key=='q'

then

uu:add(

70)--

加血end

if key=='w'

then

uu:sub(

70)--

減血end

end

love2d教程28 血條

感謝朱大仙提供的 這才有了這篇部落格。血條 至於體力 法力都是類似的 是遊戲裡常用的gui控制項,它主要實現兩個功能 增加 減少。效果如圖 沒有錄製gif 血條的繪製可以使用love裡的一些繪圖函式,還可以用填充。這裡採用bloodlineb.png填充,同時這個也是乙個quad的序列圖,用它來組成...

love2d教程26 對話條

有了之前的文字滾動顯示,現在我們在其基礎上與loveframes結合建立乙個對話條,先上 效果圖.逐行顯示 逐字顯示 功能簡介,支援事件 不過由於我把 的判斷放到了update裡所以 不支援繪圖操作 支援 中英文混排 支援多頁顯示 本頁結束後空格鍵翻頁 所有顯示結束後esc推出,呼叫也很簡單,如下 ...

love2d教程19 揹包

慚愧,在春節裡一篇文章也沒寫,現在又回到學校了,繼續love2d教程。由於我 只是現看現寫,有些地方可能錯了,希望大家指正,我會及時修正。這篇文章主要關 於loveframes的應用,是按朱大仙要求寫的,原文在此。揹包功能是通過loveframe來實現的,loveframes其實是支援中文的,只需要...