在很多游戏中,人物对话是一个一个字的显示,如果点击可以一次显示完成,一般如何实现。如果采用读取UTF-8编码的方法如何实现逐帧显示字体,即一个一个字的出现。
一两句话不好说清楚,你去搜索一下 C++ 打字机 特效,看看能不能帮到你
cocos2d-x没这个功能吧,不考虑效率的话就是多一个字就重新setString
我大致看了一下,都是采用定时器的效果,我想采用读取UTF-8编码的形式实现逐帧显示
把字挡住,用schedule去掉遮盖?
我前段时间用的一个方法,嗯,可能不是LZ说的“读取UTF-8编码的形式实现逐帧显示 ”的方法
test = parseUTF8(content); std::vector GamePlotSummary::parseUTF8(const std::string &str) { int l = str.length(); std::vector ret; // std::vector<std::string> ret; ret.clear(); for(int p = 0; p < l; ) { int size=0; unsigned char c = str; if(c < 0x80) { size = 1; } else if(c < 0xc2) { size = 2; } else if(c < 0xe0) { size = 2; } else if(c < 0xf0) { size = 3; } else if(c < 0xf8) { size = 4; } else if (c < 0xfc) { size = 5; } else if (c < 0xfe) { size = 6; } else size = 7; std::string temp = ""; temp = str.substr(p, size); ret.push_back(temp); p += size; contentLength++; } return ret; } //截取UTF8字符串 std::string GamePlotSummary::subUTF8(const std::string &str,int from, int to) { if(from > to) return ""; if (test.size() < to) return str; std::vector::iterator iter=test.begin(); std::string res; std::string result; for(iter=(test.begin() + from); iter != (test.begin() + to); iter++) { res += *iter; } return res; } void GamePlotSummary::updateStr(float cTime) { if (wordCount > contentLength) { nextStepCallBack(); this->unschedule(schedule_selector(GamePlotSummary::updateStr)); return; } wordCount++; pLabel->setString(subUTF8(content,0, wordCount).c_str()); } ```