我得到一个arraylist超出范围的例外:索引4999,此方法中的大小4999:
for (int y = 0; y < trees.getHeight() - 1; ++y) {
for (int x = 0; x < trees.getWidth() - 1; ++x) {
int c = trees.getRGB(x, y);
Color color = new Color(c);
if (color.getRed() == 0 && color.getGreen() == 255 && color.getBlue() == 0) {
treePosB.add(new Vector2f(x, y));
}
}
}
int randX = 0;
int randZ = 0;
boolean canPlace = false;
for (int i = 0; i < treesAr.size() - 1; ++i) {
randX = randInt(-terrain.getTerrainSize(), terrain.getTerrainSize());
randZ = randInt(-terrain.getTerrainSize(), terrain.getTerrainSize());
treesAr.get(i).setLocalTranslation(randX, terrain.getHeight(new Vector2f(randX, randZ)) - (40 + 1.0f), randZ);
for (int x = 0; x < treePosB.size() - 1; ++i) {
//FOLLOWING LINE CAUSES ERROR
if (treesAr.get(i).getLocalTranslation().x == treePosB.get(x).x && treesAr.get(i).getLocalTranslation().y == treePosB.get(x).y) {
canPlace = true;
continue;
}
}
if (canPlace) {
treeNode.attachChild(treesAr.get(i));
} else {
}
}
我不确定是什么造成这种情况,我已经更改了for循环以包含一个ArrayList.size - 1来调整它,因为我知道它会发生,但它仍然会发生。树ArrayLIst的创建如下:
treesAr = treeGen.generate(am);
Texture tex1 = Main.assetManager.loadTexture("Textures/Terrain/Trees/Trees1.png");
BufferedImage trees = ImageToAwt.convert(tex1.getImage(), false, true, 0);
public ArrayList<Geometry> generate(int amount) {
ArrayList trees = new ArrayList();
Geometry tree = (Geometry) Main.assetManager.loadModel(
"Models and Textures/Landscape/Trees/Pine.obj");
for (int i = 0; i < amount - 1; ++i) {
Geometry treeI = tree.clone();
trees.add(treeI);
}
return trees;
}
这是做什么的,是加载图像,并检查图像的绿色像素,并创建一个带有表示每个像素位置的矢量的arraylist。
然后加载树,并通过for循环并检查树随机化位置。如果树在像素区域内,它们将被添加到场景中,否则不会发生任何事情。
这允许我绘制图像并绘制出允许树木生成的位置。
答案 0 :(得分:2)
for (int x = 0; x < treePosB.size() - 1; ++i) {
您错误输入了此循环(x
- &gt; i
)。它会无限增加i
,直到它超出列表的大小。