author:expter
date: 2010/07/31
上次寫的超鏈接是重寫了一個(gè)單獨(dú)的超鏈接控件,主要實(shí)現(xiàn)文本的鼠標(biāo)事件和文本下劃線,靜態(tài)圖像的顯示,主要寫的渲染過(guò)程,這次為了解決動(dòng)態(tài)圖片(比如gif有多幀實(shí)現(xiàn)的解決方案).
注:主要針對(duì)當(dāng)前CEGUI的最新庫(kù)0.7.1。
目的:在游戲聊天框中可能有一個(gè)聊天表情,次表情是動(dòng)態(tài)的,需要顯示動(dòng)態(tài)表情圖片,同時(shí)可能有超鏈接等功能,我們約定一種解析格式,然后輸入表情代碼或者超鏈接內(nèi)容即可顯示我們需要的功能。
實(shí)現(xiàn)方式:
由于針對(duì)聊天窗口,所以這里聊天窗口內(nèi)容采用CEGUI::ListBox,每條消息內(nèi)容為L(zhǎng)istBoxTextItem,由于ListBox有滾動(dòng)horzScrollbar條,而一般聊天窗口沒有horzScrollbar此功能,所以假設(shè)一段話過(guò)長(zhǎng)我們需要才分內(nèi)容,可能一條消息包括多條ListBoxTextItem。每行里面可能有文本,表情,圖片,以及超鏈接等.
由于CEGUi不能直接解析Gif文件,我們需要把gif的每一幀全部到出來(lái),然后實(shí)現(xiàn)一個(gè)當(dāng)前表情anim控制類,表情管理變量,文件解析類TalkRenderedStringParser。
Anim主要記錄當(dāng)前表情應(yīng)該為那幀的哪張圖片。
表情管理主要記錄當(dāng)前所有的動(dòng)態(tài)表情,每幀時(shí)間到達(dá)的時(shí)候開始渲染。
TalkRenderedStringParser還是一個(gè)文本解析類。
簡(jiǎn)單的ChatList的主要文本如下:
[C FFFF0000]StaticTxt test1![\\ 1] [\\ 3]
dasd[\\ 2] [\\ 3] [\\ 4] [\\ 1] [\\ 5]
其實(shí)是動(dòng)態(tài)表情,只是切的圖片不能顯示了:
要實(shí)現(xiàn)一個(gè)與游戲相關(guān)的聊天窗口基本功能都具備了,這里包括實(shí)現(xiàn)超鏈接,表情圖片,圖片的功能。
然后只需要制定分頻道等功能分別顯示不同的聊天信息。

源碼功能上相對(duì)比較簡(jiǎn)單,CEGUI庫(kù)做了相應(yīng)的修改。