0

現在、ローリング テキスト メソッドを作成しようとしています。このメソッドでは、String. すぐに、左から右に描画を開始し、時間の経過とともに新しい行に移動するため、画面からはみ出さなくなります。私はFontMetrics自分の目標を達成しようとするために使用しています。

RollingText.render(Graphics g, int x, int y)メイン クラスの render メソッドから引数を my に渡します。renderメソッド内から、Graphicsフォントと色の設定を開始しFontMetrics、すべての を取得し、FontMetrics. 同様に、テキストを文字列に描画するために for ループに入ります。

public void render(Graphics g, int x, int y) {
    // text is the field that a grab the index of the string from
    // the index is the max part of the string I'm grabbing from,
    // increments using the update() method
    String str = text.substring(0, index);
    String[] words = str.split(" ");

    Font f = new Font(g.getFont().getName(), 0, 24);
    FontMetrics fmetrics = g.getFontMetrics(f);
    g.setColor(Color.white);
    g.setFont(f);

    int line = 1;
    int charsDrawn = 0;
    int wordsDrawn = 0;
    int charWidth = fmetrics.charWidth('a');
    int fontHeight = fmetrics.getHeight();
    for (int i = 0; i < words.length; i++) {
        int wordWidth = fmetrics.stringWidth(words[i]);
        if (wordWidth* wordsDrawn + charWidth * charsDrawn > game.getWidth()) {
            line++;
            charsDrawn = 0;
            wordsDrawn = 0;
        }

        g.drawString(words[i], x * charsDrawn + charWidth, y + fontHeight * line);

        charsDrawn += words[i].length();
        wordsDrawn += 1;
    }
}

drawString現在、この時点ではすべて正常に動作しますが、次のように、メソッド内の各単語間のスペースが非常に誇張されているという問題が残っています。

ローリング テキストのデモ

この線:

g.drawString(words[i], x * charsDrawn + charWidth, y + fontHeight * line);

私が現在抱えている唯一の問題は、x 位置の計算を行う正しい方法を見つけることです。現在、単語の長さに応じて大きく動的に配置されており、少なくとも正常に見えるようにする方法がわかりません。現在定義されている整数などとさまざまな組み合わせを試しました。発生する問題は、不正確な間隔から、不適切な配置やちらつき、テキストの重なりまで、どこにでもあります。

最後に、私の質問は、テキストが正しく見えるように x 座標を正しく配置するためにどのようなアルゴリズムを使用するかということです。

4

1 に答える 1