最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控制显示屏聊天,在使用中发现的结果,cocos2dx的RichText很有限。全然不具备实现聊天的功能。仅仅实现了增加文本、图像和自己定义控件的功能。支持不同字体、颜色、字号。

我个人觉得。一个RichText控件应该具备下面基本功能:

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

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

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

4、可以支持滚动的效果。

5、可以有非常方便的换行功能,最好能设置行间距。

假设可以更好的实现聊天的功能。我认为还须要增加下面功能:

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

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

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

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

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

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

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

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

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

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

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

使用代码例如以下,我是在lua里面使用的。大家能够參考一下:

function ChatUI:initRichEdit()
local widget = self:getWidget()
if widget then
--创建小喇叭控件
self._richBugle = ui.RichTextUI:create()
self._richBugle:setSize(cc.size(940, 35))
self._richBugle:setAnchorPoint(cc.p(0, 0))
self._richBugle:setPosition(cc.p(100, 510))
self._richBugle:setMaxLine(1)
--创建聊天控件
self._richChat= ui.RichTextUI:create()
self._richChat:setSize(cc.size(940, 420))
self._richChat:setAnchorPoint(cc.p(0, 0))
self._richChat:setPosition(cc.p(20, 70)) widget:addChild(self._richBugle)
widget:addChild(self._richChat) local function callback(sender, eventType)
if eventType == ui.RICHTEXT_ANCHOR_CLICKED then
print(">>>>>>>>>>>addEventListenerRichText")
end
end
self._richChat:addEventListenerRichText(callback)
end
end function ChatUI:addChatMsg(channel, roleName, chatMsg, signs)
local richText = (channel == Channel_ID_Bugle) and self._richBugle or self._richChat
if richText and channel and roleName and chatMsg then
local ChannelNameSwitch =
{
[Channel_ID_Team] = "【队伍】",
[Channel_ID_Privacy] = "【私聊】",
[Channel_ID_Faction] = "【帮会】",
[Channel_ID_World] = "【世界】",
[Channel_ID_System] = "【系统】"
}
local ChannelColor =
{
[Channel_ID_Team] = Color3B.ORANGE,
[Channel_ID_Privacy] = Color3B.ORANGE,
[Channel_ID_Faction] = Color3B.ORANGE,
[Channel_ID_World] = Color3B.ORANGE,
[Channel_ID_System] = Color3B.WHITE,
[Channel_ID_Bugle] = Color3B.ORANGE
}
local linkColor = Color3B.YELLOW
local linklineColor = Color4B.YELLOW
local outlineColor = Color4B.BLACK if channel == Channel_ID_Bugle then
richText:insertNewLine()
end
if ChannelNameSwitch[channel] then
local rc = ui.RichItemText:create(channel, ChannelColor[channel], 255, strg2u(ChannelNameSwitch[channel]), "DFYuanW7-GB2312.ttf", 25)
rc:enableOutLine(outlineColor, 2)
richText:insertElement(rc)
end
if channel ~= Channel_ID_System then
local rcn = ui.RichItemText:create(channel, linkColor, 255, strg2u(roleName), "DFYuanW7-GB2312.ttf", 25)
rcn:enableLinkLine(linklineColor, 1)
rcn:enableOutLine(outlineColor, 2)
richText:insertElement(rcn)
chatMsg = ":" .. chatMsg
end
local rcm = ui.RichItemText:create(channel, ChannelColor[channel], 255, strg2u(chatMsg), "DFYuanW7-GB2312.ttf", 25)
richText:insertElement(rcm)
if channel ~= Channel_ID_Bugle then
richText:insertNewLine()
end
end
end function ChatUI:initComponent()
self:addChatMsg(Channel_ID_Bugle, "王小二", "This is Bugle Msg")
self:addChatMsg(Channel_ID_System, "", "This is System Msg")
self:addChatMsg(Channel_ID_Team, "王小二", "This is Team Msg")
self:addChatMsg(Channel_ID_World, "王小二", "This is World Msg")
self:addChatMsg(Channel_ID_Faction, "王小二", "This is Faction Msg") self._channel = Channel_ID_World
self:showChannel(Channel_ID_All)
local btnChannel = self:getChild("Button_Channel")
if btnChannel then
btnChannel:setTitleText(strg2u("世界"))
end
end

最后是效果图:

版权声明:本文博客原创文章。博客,未经同意,不得转载。

cocos2dx对于强大的RichText控制的更多相关文章

  1. cocos2dx实现功能强大的RichText控件

    转自:http://blog.csdn.net/ljxfblog/article/details/26136773 最近准备做一个聊天系统,开始准备使用cocos2dx的UIRichText控件来显示 ...

  2. Cocos2D-x权威指南:通过节点控制屏幕中的全体渲染对象

    本节,已经能够利用我们眼下所学的知识做出一些有趣的东西.之前已经说过,CCNode类没有贴图,也就是说在屏幕上单独建立一个节点是没有不论什么效果的,可是能够通过这个"无形"的节点来 ...

  3. 万事开头难——Cocos2d-x学习历程(一)

    万事开头难,不知该从哪里开始,不过既然要学习一样新东西,那就从了解它开始吧... Cocos2d-x是一个通用平面游戏引擎,基于一个同样十分著名的游戏引擎Cocos2d-iPhone设计,Cocos2 ...

  4. 1、Cocos2dx 3.0游戏开发三找一小块前言

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  5. Linux C语言编程学习笔记 (1)进程控制入门

    想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...

  6. 1、Cocos2dx 3.0游戏开发找小三之前言篇

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  7. squid之------ACL控制

    一.ACL概念   Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等各 ...

  8. 机器指令翻译成 JavaScript —— No.3 流程分割

    上一篇 我们讨论了跳转指令,并实现「正跳转」的翻译,但最终困在「负跳转」上.而且,由于线程模型的差异,我们不能 1:1 的翻译,必须对流程进行一些改造. 当初之所以选择翻译,而不是模拟,就是出于性能考 ...

  9. .net程序部署(setupFactory进阶)

    接上一篇 继续使用上一篇的project .将archive里无用的文件删除 添加我们需要的文件进来. config是一个文本文件. 注意所有文件的 destination都是 %appfolder% ...

随机推荐

  1. adp设备是什么

    今天在写软工文档的可行性分析部分的时候.遇到一个新名词--adp,瞬间就不淡定了.原话例如以下: 6.1.1 基本建设投资 包含採购.开发和安装下列各项所需的费用,如: a. 须要提供一件教室,供开发 ...

  2. registerForRemoteNotificationTypes: is not supported in iOS 8.0 and

    注册模式: if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [[UIApplication sharedA ...

  3. jQuery.reveal弹出层

    jQuery.reveal弹出层使用 最近用到弹出层,还得自定义UI,原本用的artDialog太庞大,不合适了,于是就找到了这个东西,又小又好用,基础的弹出遮罩都有了,想要什么还不是Coder自己说 ...

  4. SSH-Struts(三)—ActionForm

    ActionForm ActionForm用于封装用户的请求数据.即用户在页面上输入的数据.它充当了一个运输工具的角色.为了能够立体的理解ActionFrom.以下从两个角度看看:     从封装的数 ...

  5. java自动转型

    /*2015-10-30*/ public class TypeAutoConvert { public static void main(String[] args) { int a = 5; Sy ...

  6. Android游戏开发研究帧动画实现

     1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...

  7. 浅谈数据结构之KMP(串中的模式匹配算法)

    KMP算法是一种模式匹配算法的改进版,其通过减少匹配的次数以及使主串不回朔来减少字符串匹配的次数,从而较少算法的相应代价,但是,事件万物是普遍归中的,KMP算法的有效性也是有一定的局限的,我将在本文的 ...

  8. 于Eclipse在建筑cocos2d-x的Android开发环境(避免cygwin)

    于Eclipse在建筑cocos2d-x的Android开发环境(避免cygwin) 在袭击几天学习Android开发之后,我開始转向cocos2d-x的Android开发了.因为自己曾经有了解过co ...

  9. android该系统的应用API选择演示版本

    转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用.首先要考虑 ...

  10. bigdata_spark_源码修改_本地环境搭建_eclise

    Eclipse 下开发调试环境的配置该小节中使用的各项工具分别为:mac (Windows 7)+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven ...