0

おそらく基本的なものが欠けていますが、プログラムにforループがあり、配列(lines[])を反復処理して画面上に描画することになっています(LWJGL / Slickを使用)。
線が別々の線(で(i*16 + 7, 5))に表示される代わりに、それらはすべて。に表示され(7, 5)ます。

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
    f.drawString((i * 16) + 7, 5, lines[i]);
  }
}

呼び出された関数が値を使用する前に値が変更されないように、ループ内の最終変数を定義することを提案する他の質問に対する回答を見てきました。だから私はコードを次のように変更しました:

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
    final int i2 = i;
    f.drawString((i2 * 16) + 7, 5, lines[i]);
  }
}

しかし、それは修正されません(私はiの最後の値に固執しておらず、Slickはiの値を保存するべきではないので、実際にはそれを期待していませんでしたが、確認しようとしました)。


drawStringのヘッダーは次のとおりです。

public void drawString(float x, float y, String whatchars)
4

2 に答える 2

2

私のコメントが答えを提供したと思うので、他の人が助けてくれるように投稿します。

正しい呼び出しは、関数のyパラメーターにオフセットを入れることです。

f.drawString(7, (i * 16)+5, lines[i]);

関数定義は次のとおりです。

public void drawString(float x, float y, String whatchars)
于 2012-11-09T19:06:29.877 に答える
0

y以下のように座標を変更する必要があると思いますx

for(int i = 0; i < lines.length; i++) {
  if(lines[i] != null) {
   f.drawString(7, (i * 16) +5, lines[i]);
  }
 }

これにより、x = 7とからの行が出力されy varying from 5 to 20ます。

于 2012-11-09T19:09:26.033 に答える