我在初始化方法中生成100个椭圆作为粒子,然后我想将它们移动一定量(比方说x)进行n次迭代。我写了以下代码片段来做到这一点。
private void drawNParticles(Graphics g)
{
ArrayList<Integer> list;
list = new ArrayList<Integer>(Collections.nCopies(n, 0));
for(int i=0;i<list.size();i++)
{
generateParticle(g);
}
}
private void generateParticle(Graphics g)
{
int radius = 4;
ArrayList<Integer> list= new ArrayList<Integer>();
list=positionParticles(particle_x,particle_y);
g.setColor(Color.RED);
g.fillOval(list.get(0),list.get(1), radius, radius);
}
private ArrayList<Integer> positionParticles(int x, int y)
{
int radius = 4;
ArrayList<Integer> list= new ArrayList<Integer>();
if(this.particle_counter==0)
{
x=randomInteger(2,678); // bounds of x between which the particles should be generated
y=randomInteger(2,448); // bounds of y between which the particles should be generated
x=x-(radius/2);
y=y-(radius/2);
if((x<251&&x>149)&&(y<266&&y>224))
{
x=0;
y=0;
positionParticles(x,y);
}
if((x<541&&x>499)&&(y<401&&y>299))
{
x=0;
y=0;
positionParticles(x,y);
}
this.particle_counter++;
}
else
{
setXPosition_particle(x);
setYPosition_particle(y);
}
list.add(x);
list.add(y);
return list;
}
public void setXPosition_particle(int x)
{
this.particle_x=x+5;
System.out.println("Particle_X:"+this.particle_x);
}
public void setYPosition_particle(int y)
{
particle_y=y+5;
System.out.println("Particle_Y:"+this.particle_y);
}
我想要的是每个粒子的位置应该增加5.但是在输出中,每个粒子都获得相同的值。我的JPanel上有一条对角线。如何单独访问每个实例变量?
答案 0 :(得分:2)
为什么不创建一个Particule类并维护一个List<Particule>
?
答案 1 :(得分:1)
你的第一个for循环正在搞乱,就像generateParticle方法一样。您应该将索引i传递给方法,您不应该在generateParticle方法中创建一个新的且完全不相关的ArrayList,而是使用方法内部的ArrayList类字段list。
我还建议您不要使用paint或paintComponent方法移动粒子,因为您无法完全控制何时或是否调用它。而是通过在Swing Timer中执行移动声明来分离粒子的移动和它们的绘制,然后简单地在paintComponent方法中迭代List,绘制每个点。