- 积分
- 1284
- 注册时间
- 2014-12-29
- 最后登录
- 2016-11-14
- 在线时间
- 17 小时
- 威望
- 11
- 贡献
- 0
- 金币
- 359
- 钢镚
- 20
- 交易凭证
- 0
- 分享
- 0
- 精华
- 0
- 帖子
- 19
- 主题
- 18
TA的每日心情 | 慵懒 2015-4-16 10:25 |
|---|
签到天数: 8 天 [LV.3]偶尔看看II
版主
   
- 威望
- 11
- 贡献
- 0
- 金币
- 359
- 钢镚
- 20
|
本帖最后由 yaoyuan0701 于 2015-1-14 23:31 编辑
- <pre>/// 获取utf8字符长度
- int getUtf8Length( const char* pszutf8 )
- {
- if( pszutf8 == NULL )
- {
- return 0;
- }
- for( int i = 8; i > 0; --i )
- {
- unsigned char c = 1 < < (i - 1);
- if( ( pszutf8[0] & c ) != c )
- {
- if( i == 8 )
- {
- return 1;
- }
- else
- {
- return 8 - i;
- }
- }
- }
- return 1;
- }</pre>
复制代码- 加载
- <pre>void Main()
- {
- std::string strSrc = "我在马路边";
- if( strSrc.empty() )
- {
- return;
- }
- size_t size = strSrc.length();
- for( size_t i = 0; i < size; )
- {
- const unsigned char c = strSrc.at(i);
- int len = getUtf8Length((const char*)&c);
- i += len;
- std::string strTemp = strSrc.substr( 0, i );
- printf("%s\n",strTemp.c_str());
-
- }
- }
- </pre>
复制代码 转载http://shadowkong.com/archives/1888
但这个方法是通过for循环遍历来更新,速度肯定是有点快了,我在原作者的基础加入控制播放速度的功能。代码如下:
getUtf8Length的方法不变。
首先定义你的定时器
- this->schedule(schedule_selector(WelcomeLayer::labelUpdata), 1.0f); //1.0f就是你的频率 单位是秒
复制代码- int firstStr=0;
- void WelcomeLayer::labelUpdata(float dt)
- {
- log("here");
- std::string strSrc = "abcdefg";
- if( strSrc.empty() )
- {
- return;
- }
- size_t size = strSrc.length();
- if (size>firstStr)
- {
- const unsigned char c = strSrc.at(firstStr);
- int len = getUtf8Length((const char*)&c);
- firstStr += len;
- std::string strTemp = strSrc.substr( 0, firstStr );
- log("%s",strTemp.c_str());
- }
- else
- {
- this->unschedule(schedule_selector(WelcomeLayer::labelUpdata));//删除定时器
-
- }
- }
复制代码 是不是也很简单呢~~
|
评分
-
查看全部评分
|