【发布时间】:2014-06-04 13:42:14
【问题描述】:
我遇到了我正在使用的 ArrayList 的问题。这是一个包含具有不同颜色和位置的精灵的对象列表。列表成功返回,我可以使用 foreach 循环将它们全部绘制到屏幕上。之后,我正在检查是否有人点击了他们的位置,并且我想返回对象包含的颜色。问题是我总是把颜色变回绿色。可能是因为我引用了所有对象而不是单个对象。我搜索了这个网站,发现了类似的问题和教程。但我似乎找不到修复代码所需的信息,以便我可以在使用 foreach 循环检查所有实例时引用列表中的单个实例。
阅读答案并使用 break 和忘记的 secondColor = true 后,我仍然遇到同样的问题。即使将单击的对象发送到另一个函数,我的问题也没有解决。因此,我不仅显示了读取列表的代码,还显示了列表填充时的代码。如何解决我在读取列表时始终只引用绿色对象但在使用 for 循环绘制时得到每种颜色的问题????
for(KleurWissel i : gameManager.getColorsList())
{
i.colorRectangle.draw(batch);
}
//Welke kleuren kies je?
if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
Iterator<KleurWissel> iterator = gameManager.getColorsList().iterator();
while(iterator.hasNext())
{
KleurWissel item = (KleurWissel) iterator.next();
if(item.getRectangle().contains(input.x, input.y))
{
if(firstColor == true && secondColor == false && item.selected == false)
{
colorArraySecond = item.colorArray;
colorArrayUsed = colorArrayFirst;
colorSelected = true;
item.selected = true;
secondColor = true;
break;
}
if(firstColor == false && item.selected == false){
colorArrayFirst = item.colorArray;
firstColor = true;
item.selected = true;
break;
}
}
}
}
这里是填充列表的代码。
private int[] colorsRGB = {0, 50, 150, 150, 200, 255};
float[] colorArrayUsed = new float[4];
private ArrayList<KleurWissel> colorsList = new ArrayList<KleurWissel>();
public void setColorsList()
{
Vector2 tempV;
KleurWissel temp;
for(int i = 0; i < 6; i++)
{
if(i<3)
{
colorArrayUsed[0] = colorsRGB[5-i];
colorArrayUsed[1] = colorsRGB[0+i];
colorArrayUsed[2] = 0;
colorArrayUsed[3] = 1;
tempV = new Vector2(Gdx.graphics.getWidth()/2 - 150 + i * 150, Gdx.graphics.getHeight()/2 + 130);
}
else{
if(i == 3)
{
colorArrayUsed[0] = 0;
colorArrayUsed[1] = 0;
colorArrayUsed[2] = colorsRGB[5];
colorArrayUsed[3] = 1;
tempV = new Vector2(Gdx.graphics.getWidth()/2 - 150, Gdx.graphics.getHeight()/2);
}
else{
colorArrayUsed[0] = 0;
colorArrayUsed[1] = colorsRGB[0+i];
colorArrayUsed[2] = colorsRGB[5-i];
colorArrayUsed[3] = 1;
tempV = new Vector2(Gdx.graphics.getWidth()/2 - 600 + i * 150, Gdx.graphics.getHeight()/2);
}
}
temp = new KleurWissel(colorArrayUsed, tempV);
colorsList.add(temp);
}
}
public ArrayList<KleurWissel> getColorsList()
{
return colorsList;
}
KleurWissel 是颜色对象,抱歉有点荷兰语>.>.
【问题讨论】:
-
一团糟。我建议您为循环中使用的
Gdx.input.getY()等创建局部变量。眼睛会更轻松,效率也会更高。 -
你确定问题不在逻辑上,而是在列表的遍历上?
-
我建议你在调试器下运行这段代码。
标签: java object collections arraylist foreach