今回はノベルゲームとかで見られる文字列を一文字ずつ描画する方法を残します。ちなみに、描画には前回のメモで作ったテキストボックスを使っています。
まず、タイマー、描画する文字列、描画する文字数、文字を描画するスピードを保存する変数を作ります。
string m_text = "...etc"; // 描画する文字列 float m_timer; // タイマー float m_nextLetter; // 次の文字列を描画する時間 int m_currentIndex; // 描画する文字の数
次に、Updateメソッド(または、毎フレーム呼ばれる他の関数)内でタイマーに前のフレームから経過した時間を足します。
float delta = (float)gameTime.ElapsedGameTime.TotalSeconds; m_timer += delta;
タイマーを更新した後は前回描画する文字数を増やしてから一定以上時間が経過しているかを確認します(ここで使われるm_nextLetter変数の値を下げるとより早く描画され、上げると遅くなります)
// 次の文字を描画するかの確認 if (m_timer >= m_nextLetter) {
一定上時間が経過していた場合、タイマーをリセットし、描画する文字数を増やします。増やした文字数は念のために文字列を超えていないかも確認します。
// タイマーのリセット m_timer = 0.0f; // 描画する文字数を増やす m_currentIndex++; if (m_currentIndex >= m_text.Length) { m_currentIndex = m_text.Length; } }
次は、描画方法です。描画する文字列を獲得するにはstring.Substring()メソッドを使用します。このメソッドは文字列の指定した部分(この場合最初の文字から、m_currentIndexの部分までの文字)を返します。
// 描画する文字列を獲得する string text = m_text.Substring(0, m_currentIndex);
後は文字列を描画するだけです。この部分には前回作ったテキストボックスが使われています。
// 文字列の描画 m_textbox.Draw(spriteBatch, m_font, text, m_pixel, new Color(0, 0, 0, 0.65f), Color.White, true);
今回はココまでです。作ったプロジェクトはココに置いておきます:
[…] 内容的にはXNAメモ – 流れるテキストの作り方 と大体同じです。 […]