cocos2dx实现功能强大的RichText控件

最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控件来显示聊天内容,结果在使用的时候才发现,cocos2dx的RichText功能非常有限,完全不具备实现聊天的功能,只实现了加入文本、图像和自定义控件的功能,支持不同字体、颜色、字号。

      我个人认为,一个RichText控件应该具备以下基本功能:

      1、多样化的文本显示功能,包括字体、颜色、字号的设置。

      2、能显示图片以及一些特殊元素。

      3、应该支持图片文字的超链接功能。

      4、能够支持滚动的效果。

      5、能够有很方便的换行功能,最好能设置行间距。

      如果能够更好的实现聊天的功能,我觉得还需要加入以下功能:

      1、文本特效:描边,下划线,阴影,发光等功能。

      2、支持设置控件最大显示行数。

      3、支持数据的分类显示,用于分频道显示聊天内容。

      cocos2dx只实现了基础的1和2功能,所以考虑之后还是决定自己写一个RichText控件。UIRichText的框架还是不错的,实现了文本分行显示的技术。在他的基础上很容易扩展。 

      首先,扩展RichItem,用来支持多样化的文本需求。

      其次,扩展Label控件,用于支持特殊的文字效果。

      再次,需要实现滚动功能,控件继承UIScrollView。

      最后,还需要对lua进行支持,包括使用功能以及超链接点击事件的注册。

      以上是我实现控件的思路,这里就不贴代码了,很多,我会把我的控件代码共享给大家,大家在使用中有什么问题也可以向我咨询。 

       源代码在这里,cocos2dx-3.0功能强大的richText控件

      最后贴一下使用的代码和效果图吧!

      使用代码如下,我是在lua里面使用的,大家可以参考一下:     

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. function ChatUI:initRichEdit()      
  2.     local widget = self:getWidget()  
  3.     if widget then  
  4.         --创建小喇叭控件  
  5.         self._richBugle = ui.RichTextUI:create()  
  6.         self._richBugle:setSize(cc.size(940, 35))  
  7.         self._richBugle:setAnchorPoint(cc.p(0, 0))  
  8.         self._richBugle:setPosition(cc.p(100, 510))  
  9.         self._richBugle:setMaxLine(1)  
  10.         --创建聊天控件  
  11.         self._richChat= ui.RichTextUI:create()  
  12.         self._richChat:setSize(cc.size(940, 420))  
  13.         self._richChat:setAnchorPoint(cc.p(0, 0))  
  14.         self._richChat:setPosition(cc.p(20, 70))    
  15.   
  16.         widget:addChild(self._richBugle)  
  17.         widget:addChild(self._richChat)  
  18.   
  19.         local function callback(sender, eventType)  
  20.             if eventType == ui.RICHTEXT_ANCHOR_CLICKED then  
  21.                 print(">>>>>>>>>>>addEventListenerRichText")  
  22.             end  
  23.         end  
  24.         self._richChat:addEventListenerRichText(callback)  
  25.     end   
  26. end  
  27.   
  28. function ChatUI:addChatMsg(channel, roleName, chatMsg, signs)  
  29.     local richText = (channel == Channel_ID_Bugle) and self._richBugle or self._richChat  
  30.     if richText and channel and roleName and chatMsg then  
  31.         local ChannelNameSwitch =   
  32.         {  
  33.             [Channel_ID_Team] = "【队伍】",  
  34.             [Channel_ID_Privacy] = "【私聊】",  
  35.             [Channel_ID_Faction] = "【帮会】",  
  36.             [Channel_ID_World] = "【世界】",  
  37.             [Channel_ID_System] = "【系统】"  
  38.         }  
  39.         local ChannelColor =   
  40.         {  
  41.             [Channel_ID_Team] = Color3B.ORANGE,  
  42.             [Channel_ID_Privacy] = Color3B.ORANGE,  
  43.             [Channel_ID_Faction] = Color3B.ORANGE,  
  44.             [Channel_ID_World] = Color3B.ORANGE,  
  45.             [Channel_ID_System] = Color3B.WHITE,  
  46.             [Channel_ID_Bugle] = Color3B.ORANGE  
  47.         }  
  48.         local linkColor = Color3B.YELLOW  
  49.         local linklineColor = Color4B.YELLOW     
  50.         local outlineColor = Color4B.BLACK    
  51.   
  52.         if channel == Channel_ID_Bugle then  
  53.             richText:insertNewLine()  
  54.         end  
  55.         if ChannelNameSwitch[channel] then  
  56.             local rc = ui.RichItemText:create(channel, ChannelColor[channel], 255, strg2u(ChannelNameSwitch[channel]), "DFYuanW7-GB2312.ttf", 25)      
  57.             rc:enableOutLine(outlineColor, 2)  
  58.             richText:insertElement(rc)  
  59.         end  
  60.         if channel ~= Channel_ID_System then  
  61.             local rcn = ui.RichItemText:create(channel, linkColor, 255, strg2u(roleName), "DFYuanW7-GB2312.ttf", 25)    
  62.             rcn:enableLinkLine(linklineColor, 1)  
  63.             rcn:enableOutLine(outlineColor, 2)  
  64.             richText:insertElement(rcn)  
  65.             chatMsg = ":" .. chatMsg  
  66.         end  
  67.         local rcm = ui.RichItemText:create(channel, ChannelColor[channel], 255, strg2u(chatMsg), "DFYuanW7-GB2312.ttf", 25)    
  68.         richText:insertElement(rcm)  
  69.         if channel ~= Channel_ID_Bugle then  
  70.             richText:insertNewLine()  
  71.         end  
  72.     end  
  73. end  
  74.   
  75. function ChatUI:initComponent()     
  76.     self:addChatMsg(Channel_ID_Bugle, "王小二", "This is Bugle Msg")  
  77.     self:addChatMsg(Channel_ID_System, "", "This is System Msg")  
  78.     self:addChatMsg(Channel_ID_Team, "王小二", "This is Team Msg")  
  79.     self:addChatMsg(Channel_ID_World, "王小二", "This is World Msg")  
  80.     self:addChatMsg(Channel_ID_Faction, "王小二", "This is Faction Msg")  
  81.   
  82.     self._channel = Channel_ID_World  
  83.     self:showChannel(Channel_ID_All)  
  84.     local btnChannel = self:getChild("Button_Channel")  
  85.     if btnChannel then  
  86.         btnChannel:setTitleText(strg2u("世界"))  
  87.     end      
  88. end  

        最后是效果图:

本文摘自:http://blog.csdn.net/ljxfblog/article/details/26136773

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Cocos2d-iPhone是一个基于Objective-C的2D游戏开发框架,它支持在iPhone和iPad上进行游戏开发。Cocos2d-iPhone使用了OpenGL ES来加速渲染,并提供了一组强大的工具和库,方便开发者创建高性能的移动游戏。 iWebBrowser是Cocos2d-iPhone框架中一个非常实用的工具,它可以在游戏中内嵌一个网页浏览器。通过iWebBrowser,开发者可以在游戏中直接展示网页内容,实现各种功能,比如游戏内置网页广告、帮助文档的展示等等。 使用iWebBrowser可以很方便地在游戏中加载和展示网页内容。它提供了加载URL、返回、刷新等常见的网页浏览器功能,并且可以自定义外观和布局。开发者可以根据需要,调整浏览器的大小、位置,使其更好地适应游戏界面。 在使用iWebBrowser的过程中,开发者可以根据游戏的需求,通过Cocos2d-iPhone的其他功能和特性,来增强浏览器的交互性和可玩性。比如,可以在浏览器加载完页面后,通过Cocos2d-iPhone提供的触摸事件来对页面上的元素进行交互操作,或者在游戏中嵌入自定义的按钮和控件,以提供更丰富的功能。 总之,Cocos2d-iPhone的iWebBrowser提供了一种简单而强大的方式,让开发者可以在游戏中内嵌一个网页浏览器,展示各种网页内容,并与游戏其他功能进行结合,提供更好的用户体验。无论是展示广告、加载帮助文档还是其他网页内容,iWebBrowser都是一个非常实用的工具。 ### 回答2: Cocos2d-iPhone是一个开源的2D游戏开发框架,用于iOS平台的游戏开发。它基于Objective-C语言编写,具有简单易用、跨平台、性能高效等特点。Cocos2d-iPhone提供了丰富的功能和工具,开发者可以利用它来创建各种类型的2D游戏。 Web浏览器(iWebBrowser)是一种用于访问和浏览互联网上的网页的应用程序。在Cocos2d-iPhone中,我们可以通过使用内置的Web浏览器组件来实现游戏内嵌网页的功能。通过Cocos2d-iPhone的Web浏览器组件,我们可以将一个网页嵌入到游戏场景中,并且在游戏中实时显示和交互。 使用Cocos2d-iPhone的Web浏览器组件,开发者可以实现许多有趣的功能和效果。比如,我们可以在游戏中实时显示网络上的实时数据,或者在游戏中嵌入一些广告或者社交媒体的内容。通过Web浏览器组件,我们可以方便地加载和显示网络上的网页内容,并且可以在游戏中进行交互操作。 总之,Cocos2d-iPhone提供了内置的Web浏览器组件(iWebBrowser),使得在游戏中嵌入和显示网页成为可能。通过这个功能,开发者可以实现各种有趣的功能和效果,提升游戏的交互性和娱乐性。 ### 回答3: Cocos2d是一个流行的开源游戏开发引擎,适用于多平台的游戏开发。它是基于C++语言的,并且有支持多种编程语言的绑定,如Python和Lua。Cocos2d提供了丰富的功能和工具,使开发者能够轻松创建高品质的游戏。 iWebBrowser是Cocos2d中的一个类,它是用于在游戏中展示网页内容的组件。iWebBrowser可以嵌入到游戏中的任何场景中,可以展示网页内容,并且可以通过Cocos2d的渲染系统将网页渲染到游戏窗口中。开发者可以利用iWebBrowser来实现一些与网页相关的功能,如展示游戏动态、显示游戏公告等。 Cocos2d提供了一系列的API来控制iWebBrowser的行为和显示。开发者可以通过这些API来加载指定的网页内容,设置网页的大小和位置,监听网页加载完成的事件等。同时,开发者也可以通过这些API来实现一些与网页交互的功能,如获取网页内容、执行网页上的JavaScript等。 iWebBrowser在编写游戏时非常有用,它允许开发者将网页内容无缝地集成到游戏中,提供了更加丰富的内容展示方式。无论是展示游戏内的一些信息,还是进行广告宣传,iWebBrowser都可以做到简单、高效的集成。开发者可以通过Cocos2d提供的API来灵活地控制iWebBrowser的显示与交互,以满足游戏的需求。 总之,Cocos2d iWebBrowser是Cocos2d游戏引擎中的一个组件,用于在游戏中展示网页内容,并提供了一系列的API来控制其行为和交互。这个组件能够帮助开发者更好地展示游戏内的信息和进行广告宣传等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值