love2d教程26--對話條


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

效果圖.

逐行顯示

逐字顯示

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

中英文混排、支持多頁顯示、本頁結束后空格鍵翻頁、所有顯示結束后esc推出,調用也很簡單,如下

msg:add{msg={"hello\n歡迎來到我的博客\n希望和大家一同進步",
"有問題可以給我留言,一同討論"},mode="wd",fun=function() print("msg is over") end}

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

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

顯示模式默認為逐行顯示可以為空,回調函數也可以為空。

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

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

skin.controls.panel_body_color為{154,210,211, 255},就是上圖的顏色了。

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

的一些默認值

message={fh=basicfont:getHeight(),curPage=1,count=1,rate=0.1,st=0,curStr="",
isEnd=false,isShow=true,isOver=false,onOver=function()end}。

 

逐字顯示的原理和之前的一樣,這里就不說了。逐行顯示則是手動統計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 do
            self.select:Move("up")
        end
        
    end

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

有問題請留言,不過現在時間較少,一周才能回復。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM