热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对CCLabelTTF进行自动换行,显示打字效果(转)

有时候我们在开发cocos2d游戏的时候,会用到任务的对话,或者在做任务的时候跟npc进行对话。这几天正好项目需要,就写了个简单的labe

有时候我们在开发cocos2d游戏的时候,会用到任务的对话,或者在做任务的时候跟npc进行对话。这几天正好项目需要,就写了个简单的label,效果就是我们打字一样,一个一个显示出来,自动换行。在我这个例子中,我把总的行数限定4行,根据这个先决条件写了下面的几行代码,仅供参考!!


ary = [NSMutableArray arrayWithCapacity:20];

[ary retain];

 

int length = [copyStr length];

 

int line = 1; // 必须要有一行

int wordCount = 0; // 标记第几个字

 

for (int i = 0; i

{

// 发现回车行数加1

if ([copyStr characterAtIndex:i] == '\n') 

{

line++;

//NSLog(@"subStr === %@",[copyStr substringToIndex:i]);

[ary addObject:[copyStr substringToIndex:i]];

//NSLog(@"剩余的字符串:%@",[copyStr substringFromIndex:i+1]);

copyStr = [copyStr substringFromIndex:i+1];

length = [copyStr length];// 截取了回车之前的部分之后,就要从新计算剩余字符串的长度

wordCount = 0;

i = 0;

}

 

 

if (wordCount*14 > 300) 

{

line++;

//NSLog(@"第一次截取 :%@",[copyStr substringToIndex:wordCount]);

[ary addObject:[copyStr substringToIndex:wordCount]];

copyStr = [copyStr substringFromIndex:wordCount];

//NSLog(@"省下的 === %@",copyStr);

length = [copyStr length];

if (length

{

[ary addObject:copyStr];

}

//NSLog(@"省下的长度 === %d",length);

wordCount = 0// 如果发现,到某个字的时候,总的宽度大于了300我们就要手动换行,然后从新开始记数

i = 0; // 从新开始循环变量也要归0

}

 

//NSLog(@"i == %d",i);

wordCount++;

 

 

}

 

//CGSize size = [kString sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:14] constrainedToSize:CGSizeMake(300, 1000) lineBreakMode:UILineBreakModeWordWrap];

 

//[self schedule:@selector(setSubString:) interval:0.03];

 

}

 

 

NSMutableArray* array = [NSMutableArray arrayWithCapacity:10];

 

NSMutableString* mStr = [[NSMutableString alloc] init];

 

int lineCount = 0;

int maxLine = [ary count];

 

// 4句话合成一句话

for(NSString* str in ary)

{

[mStr appendString:str];

 

lineCount++;

if(lineCount%4==0||lineCount>=maxLine)

{

[array addObject:[NSString stringWithFormat:@"%@",mStr]];

[mStr deleteCharactersInRange:NSMakeRange(0, [mStr length])];

}

}

 

// 获取完之后,由于从新组合了数组,我们把这哥ary清空,从新放入新数组中的对象,就是一个方便

[ary removeAllObjects];

 

for (int n &#61; 0; n <[array count]; n&#43;&#43;) 

{

//NSLog(&#64;"array[%d] &#61;&#61; %&#64;",n,[array objectAtIndex:n]);

 

[ary addObject:[array objectAtIndex:n]];

}

 

// 标记重新组合的字符串在数组中的索引

printID &#61; 0;

[self nextPrint];

 

return self;

}


-(void)nextPrint

{

// 标记搜索到的字符数

printIndex &#61; 0;

strPrint &#61; [ary objectAtIndex:printID];

// 求拿出来的字符串的长度

maxPrint &#61; [strPrint length];

printID&#43;&#43;;

 

[self schedule:&#64;selector(print:) interval:0.05];

 

}


-(void)print:(ccTime)step

{

printIndex&#43;&#43;;

[self printString:strPrint index:printIndex];

 

if(printIndex>&#61;maxPrint)

{

[self unschedule:_cmd];

 

if (printID <[ary count]) 

{

[self nextPrint];

}

 

}

}



-(void)printString:(NSString*)str index:(int)index

{


[label setString:[str substringToIndex:index]];

}

转:https://www.cnblogs.com/pinping/archive/2011/11/10/2244099.html



推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
author-avatar
高人arm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有