CEGUI 聊天对话框

最近在写聊天对话框,使用CEGUI,就是游戏中左下角聊天模块,主要功能就是显示用户的名称,聊天的内容,表情,以及一些装备格式像下面这个样子

[莫压枯枯地]:大家晚上好[表情],这是我新穿的衣服[装备].
在此记录一下我遇到的问题及解决方案

整个聊天列表是使用StaticText控件完成的,即,所以有聊天信息都是这个StaticText的Text属性值
用户名,[莫压枯枯地]如果只是要求使用与聊天内容不同的字体、不同颜色的话,那就可以直接设置这段内容属性值,像这样,插入一段新的聊天内容:s

 
  
local infoWin = CEGUI.WindowManager:getSingleton():getWindow( " ChatWindow/Infolist " );
local priTxtFont = infoWin:getFont(); -- 保留原来的字体
local priTxtColour = infoWin:getProperty( " TextColours " ); -- 保留原来的颜色
local newInfo = " [font='字体'][colour='FFFF0000'][莫压枯枯地] " ..
" [font=' " .. priTxtFont .. " '][colour=' " .. priTxtColour .. " ']:hallow. " ;
infoWin:setProperty(
" Text " , infoWin:getText() .. newInfo)
如果是要求,鼠标放在上面有相关的事件,或者双击这个用户,编辑框中就出现这个用户的名称(表示要对这个用户说话时候),再或者要求用户的名称要有背景颜色,且不同类型的用户有不同的背景,如管理员与普通玩家的背景要求不同,还要文字的颜色可以设置不同,这个做起来有些麻烦,首先把我发现的CEGUI的问题描述一下:首先是事件,这个要插入一个控件,控件有相关的事件绑定,如鼠标放在上面,触发事件,然后出现一个消息框,描述这个玩家的一些信息,鼠标拿开,这个信息框就消失;双击这个控件,就将用户的名称追加到编辑框中;要有背景颜色,CEGUI中我还没有发现StaticText可以直接设置背景色,通过DEMO我发现它是在looknfeel文件中设置相关的图片来作为背景图片,背景的颜色也是可以在looknfeel中设置,可是如果不同背景颜色的控件都在looknfeel中使用一个单独的WidgetLook的话,那有些麻烦(突然想起来,可以将looknfeel改一下,就像StaticText的Text颜色可以设置一样,背景也可以改成通过控件的属性值来设置,待会儿试一下,明天把结果贴出来),刚才说到StaticText设置背景色,不可以直接通过属性来设置,且设置背景图片亦不可通过属性来直接设置,不过StaticImage可以通过设置背景图片来设置它的背景,而且StaticText亦可以将背景设置为透明,这样就好办了,设置一个控件,StaticImage中包含一个StaticText就OK了(StaticImage不可以设置文本所以在StaticImage中包含一个StaticText窗口,并把StaticText窗口设置为背景透明)StaticImage换背景图片很方便,只要美工给力,想怎么换都行,这样背景就有了,而StaticText可以设置文字的类型和颜色,且可以绑定事件到StaticText窗口(不是StaticImage窗口,因为StaticImage窗口已经被StaticText完整的覆盖了,所以StaticImage窗口不能直接的收到鼠标点击的消息) ,OK,背景有了,文字的类型与颜色也都有了,问题解决了,装备也是这样放置一个控件窗口来完成的,效果做的好的话,完全看不出来与其它文字有什么不同,唯一不同的是,这段文字(装备名称),可以有事件,它弹出一个信息框。还有一个问题,就是这个控件窗口的大小(高度与宽度),我现在叫[莫压枯枯地],五个字,产生的控件窗口大小要正好将这五个字放进去,其它用户的名称肯定有长有短,得动态产生这些个控件,且控件的大小要与字符串内容的宽高相符合,这个要使用Font的PointSize属性,见代码:
 
  
function lua_computeStringWH(win, contentString) -- width && height
local font = win:getFont();
local ps = font:getProperty( " PointSize " );
local width = string.len (contentString) * ps + 6 ;
local height = ps + 6 ;

return " {{0,0},{0,0},{0, " .. width .. " },{0, " .. height .. " }} "
end
使用StaticText有下拉滚动条,发信息到聊天框的时候,滚动条它始终在上面,没有自动的往下面滚动,让玩家看到最新的消息,可以获取StaticText窗口的滚动条,发信息的时候将滚动条的位置到最下面,这样就OK了,在looknfeel文件,滚动条是作为StaticText的子控件,Child属性就是表示它是子控件,以TaharezLook/StaticText为例,有这么一行:<Child  type="TaharezLook/VerticalScrollbar" nameSuffix="__auto_vscrollbar__">这个表示,StaticText有一个子控件,类型是:"TaharezLook/VerticalScrollbar",这个子控件的名称是:"__auto_vscrollbar__",假如此时StaticText的名称为Chat/Infolist,那这个滚动条的名称就是:Chat/Infolist__auto_vscrollbar__(注意这点,它的真正名称是它的父控件的名称加这个后缀名,只有这个名称才是WindowManager可以通过它来获取这个滚动条控件),见代码:
 
  
hscrollbarName = infoWin:getName() .. " __auto_vscrollbar__ " ;
hscrollbar
= winMgr:getWindow(hscrollbarName);

这样就得到了这个滚动条控件,你可以通过ScrollPosition这个属性来设置滚动条的位置,如hscrollbar:setProperty("ScrollPosition", "20");

我遇到的问题基本上就这些,明天写,在聊天框中显示动态表情

转载于:https://www.cnblogs.com/emyueguang/archive/2011/07/10/2102604.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值