love2d教程26 對話條

2022-05-22 16:15:13 字數 1578 閱讀 6175

有了之前的文字滾動顯示,現在我們在其基礎上與loveframes結合建立乙個對話條,先上

效果圖.

逐行顯示

逐字顯示

功能簡介,支援事件**(不過由於我把**的判斷放到了update裡所以**不支援繪圖操作)、支援

中英文混排、支援多頁顯示、本頁結束後空格鍵翻頁、所有顯示結束後esc推出,呼叫也很簡單,如下

其中add函式的引數意義為:對話內容表(msg={})、顯示模式(mode)、**函式(fun=)。

對話內容表裡的每一項為字串型別表示一頁,你可以在每一項裡使用"\n"來換行。

顯示模式預設為逐行顯示可以為空,**函式也可以為空。

下面說一下思路,先用loveframes裡的panel+text建立乙個用於顯示的面板,不過顯示的顏色不對,那我

們直接修改一下panel的**即可,開啟loveframes(有個skin目錄)的blue**,修改80行的

skin.controls.panel_body_color為,就是上圖的顏色了。

現在把panel+text都放在乙個message類裡,由於有許多屬性需要控制因此變數比較多,如message屬性

的一些預設值

message=。

逐字顯示的原理和之前的一樣,這裡就不說了。逐行顯示則是手動統計msg={}裡字串裡"\n"的

個數來計算行數,還要與selectbox控制項結合,根據不同的行數來設定selectbox裡邊界,其中用到

了字串分割函式spilt(返回乙個字串表t,通過#t,可以得到行數),我放到了misc.lua裡。

附:本文**有點問題,在按鍵處理放錯地方了,由於時間有限,下面是簡易修改辦法,

把message.lua裡的lineupdate函式開頭的這幾行修改一下,增加按鍵防抖

local delta_t=0

--按鍵防抖計時

function

message:lineupdate(dt)

self.id=self.select

:getid()

if self.id==self.ln and love.keyboard.isdown("

") then

--按鍵防抖

delta_t=delta_t+dt

if delta_t<0.1

then

return

else delta_t=0

end--

0.1可以自己適當修改

self.curpage=self.curpage+1

--把游標移至第一行

for i=1,self.id-1

doself.

select:move("up"

)

endend

最好的辦法是把按鍵檢測移到love.keypressed。估計其它地方也有此類問題,大家注意一下,

love2d教程28 血條

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

love2d教程28 血條

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

love2d教程19 揹包

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