0

可能缺少一些基本的东西,但我的程序中有一个 for 循环,它应该遍历数组 ( lines[]) 并将它们绘制在屏幕上(使用 LWJGL/Slick)。
而不是在单独的行 (at (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 回答