こんにちは。akiです。
この記事ではテキストを1文字ずつ表示する「文字送り」についてCocos2d-xで実装する方法を説明していきます。RPGなどで良く見かけるアレですね。
基本的な考え方
1.予めテキストを透明化しておく
2.時間差で1文字ずつテキストの透明化を解除する
プログラム実装
// テキストの生成&透明化 Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto text = Label::createWithTTF("文字送りのテストです。\n改行コードも挟めます。", FONT, 10); text->setPosition(Vec2(visibleSize.width / 2 + origin.x , visibleSize.height / 2 + origin.y)); text->setColor(Color3B::WHITE); text->setOpacity(0);// ポイント1 テキストの透明化 this->addChild(text); // テキストの透明化解除 for(int i = 0; i < text->getStringLength(); i++){ auto func = CallFunc::create([this, i, text](){ Sprite* sp = text->getLetter(i); if(sp != nullptr){ text->getLetter(i)->setOpacity(255);// ポイント2 テキストを1文字ずつ透明化解除 } }); auto delay = DelayTime::create(.05 * i); auto seq = Sequence::create(delay, func, nullptr); if(text->getLetter(i) != nullptr){ text->getLetter(i)->runAction(seq); } }
ポイントはgetLetter()ですね。改行コードも勝手に処理してくれます。
細かいテクニックですが、こういう演出がゲームらしさを出すのだと思います。