关于CocoStudio中AtlasLabel控件后台编码的一点备注

适用版本:CocoStudio 1.4.0.1

我们知道,CocoStudio搭配Cocos2d-x开发是最省力的选择。但是,要想实现这一点,需要开发者对于示例工作Demo---TestCpp中几乎所有编码都要有细致的理解。

问题

在当前的CocoStudio版本中,要实现图像化显示数字的一种重要方法就是借助于UI编辑器提供的AtlasLabel控件。这个控件与示例工作Demo---TestCpp中的CCLabelAtlas控件基本是对应的。因此,理解了这里的CCLabelAtlas使用思路,则通过后台编码操纵CocoStudio的UI编辑器提供的AtlasLabel控件就非常容易了。

例如,我的UI编辑器提供的AtlasLabel控件设置如下图所示:

上述控件对应的图像文件为png格式(其中旋转的各个字符应该是等宽度的,以便下面使用各个参数获取之用)。内容为“0123456789”。其中几个重要参数含义如下:

标签首字符:要从图像文件中获取的第一个字符(其他的字符都以它为起点,因此,这个首字符的确定非常重要,其前面的字符将不会显示)

  • 标签字符宽:每个图形字符的宽度
  • 标签字符高:每个图形字符的高度
  • 文本:以后使用控件时要显示的所有字符的集合(很可能是上述png文件字符内容集合中的一个子集)

技巧:

在设置上面参数时,特别是调整“标签字符宽”时,要确保相应控件中要显示的所有图形字符都要显示出来(最好恰好),如上图心形上面的数字显示形式。这样一来,以后通过控件的后台代码给控件赋值时,才能保证数字标签内容正确显示。

也就是说,上面的参数化设置相当于使用如下后台代码初始化了上述控件(FROM FILE ‘UILabelAtlasTest.cpp’):

        UILabelAtlas* labelAtlas = UILabelAtlas::create();
        labelAtlas->setProperty("1234567890", "cocosgui/labelatlas.png", 17, 22, "0");
        labelAtlas->setPosition(ccp((widgetSize.width) / 2, widgetSize.height / 2.0f));
        
        m_pUiLayer->addWidget(labelAtlas);

上述代码主要是初始化了控件,至于设置控件的实际文本数据则使用如下代码:

   //set string value for labelatlas.
    void setStringValue(const std::string& value);

对于我上面使用CocoStudio创建的UI控件,我使用了如下代码设置它的实际要显示的数字字符串值:

LabelAtlas* AtlasLabel_1 = static_cast<LabelAtlas*>(ul->getWidgetByName("AtlasLabel_1"));
AtlasLabel_1->setStringValue(CCString::createWithFormat("%d",500)->m_sString);

小结

正确理解UI编辑器中AtlasLabel控件的上述几个参数的含义至关重要;否则,可能引起后台代码的操作混乱,以致于无法正常显示要显示的数字串。

关于CocoStudio中AtlasLabel控件后台编码的一点备注

时间: 2024-08-25 06:45:37

关于CocoStudio中AtlasLabel控件后台编码的一点备注的相关文章

cocoStudio:ScrollView控件使用记录

cocoStudio中ScrollView控件使用: 原由: 在cocoStudio工具中使用scrollView控件时,默认情况下滚动区域和控件大小相同, 但是我们实际添加的内容有可能比控件大,也有可能比控件小,那怎么处理这种 情况呢? 试验方式: 1.通过getInnerContainerSize方法获取滚动区域大小,然后把我们的子控件从上往下加 即第一个控件坐标getInnerContainerSize.height,第二个控件位置为getInnerContainerSize.height

.NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法

.NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法 当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下 当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空” 原理没想通,说不清楚微软是出于什么考虑的,不过有时是要我们能通过前台脚本来填充值,并不希望用户修改其控件内

ASP.NET中TextBox控件设立ReadOnly=&quot;true&quot;后台取不到值

SP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空”  .    方法一:不设置ReadOnly属性,通过οnfοcus=this.blur()来模拟,如下: <asp:TextBox ID="TextBox1" runat="server" οnfοcu

轻松学习Asp.net中的控件

C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件:因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统.

cocostudio学习(UIScrollView控件内部子控件的可视化问题)

cocostudio学习(UIScrollView控件内部子控件的可视化问题) 本文内容也是本人学习过程中与COCOSTUDIO开发高手Nutty的对话记录. googleman  10:57:07 Nutty先生好!按照您的指导,在使用UIScrollView时,先尽量避免使用内部子控件的删除/移动/添等操作.于是,在强调用户选择的是其中内部哪一个子项时我使用了在其前面显示一个'框'(UIImageView)的方法.于是,在初期,仅有一个框框出默认选择的内部子项(也是UIImageView).

母版页中对控件ID的处理

注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章. 本篇技巧和诀窍记录的是:母版页中对控件ID的处理. 一.问题提出 由于总体排版和设计的需要,我们往往创建母版页来实现整个网站的统一性,最近我由于统一性的需要,把原来整个项目单独的页面全部套用了母版页.但是出现了一个错误--在我的Blog中记录一下,方便大家参考. 二. 抽象模型 由于整个页面内容过多,所以我把这个页面中最为本质的问题抽象出来.原来单一页面,就是利用按钮触发JS事件,在文本域中插入"(_)"功能,其实现代码如下:

在WinForm中使用委托来在其他线程中改变控件的显示

假设winform中有两个控件: 1.ListView用来显示进度的文本提示,ID:listView_progressInfo 2.ProgressBar用来显示进度,ID:progressBar1 在此winform的后台.cs文件中声明两个公用委托类型:ControlChanger, ProgressChanger public delegate void ControlChanger(string progressText); public delegate void ProgressCh

ASP.NET 获取不同frame中的控件

最近在做网站时遇到一个问题,需要获取不同frame中的控件,请教了一些同事,他们都说是无法取到的, 在网上查找了很多资料,找到了解决方法,现在整理一下当初的解决思路: 1.我需要在mainFrame中控制leftFrame中一个DIV控件的显示,如图示: 2.直接在mainFrame中通过document.getElementById('div1')去获取,结果取不到: 3.既然直接取不到,那我可不可以先取得leftFrame中所有的控件呢,尝试了一下,是可以的: 1 var iObj=pare

C#中WebBrowser控件的使用

今天在YouTube上看了一个关于WebBrowser控件用法的小视频,做一下总结. 首先创建一个WinForm程序,拖入一个textbox控件和一个button按钮,然后拖入一个panel控件,如图所示: 拖入panel控件后,找到WebBrowser控件并双击,WebBrowser控件就会自动填充到panel控件上,像下面这样: 之后给button改个名,双击button按钮设置一个简单的跳转行为: private void goButton_Click(object sender, Eve