大家好 Stack Overflow :)
在编码方面,我是一个巨大的新手,而且我刚刚遇到了一个我的大脑无法克服的问题......
在我开始谈论这个问题之前,我将粘贴我的代码,以便提供一些上下文(如果看到它让你想吐,请提前抱歉)。该问题的主要焦点已发表评论,因此应该相当明显:
主要
ArrayList<Individual> individuals = new ArrayList<Individual>();
void setup()
{
size(500,500);
for(int i = 0; i < 2; i++)
{
individuals.add(new Individual());
}
println(frameRate);
}
void draw()
{
background(230);
for(int i = 0; i < individuals.size(); i++)
{
individuals.get(i).move();
individuals.get(i).increaseTimers();
individuals.get(i).display();
}
}
个人
class Individual
{
float x;
float y;
int size = 5;
Timer rdyBreed; /* Here is the object that appears to be shared
between individuals of the ArrayList */
float breedRate;
float breedLimit;
Individual()
{
x = random(0, width);
y = random(0, height);
rdyBreed = new Timer("rdyBreed", 0);
breedRate = random(.2, 3);
breedLimit = random(10, 20);
}
void move()
{
int i = (int)random(0, 1.999);
int j = (int)random(0, 1.999);
if (i == 0)
{
x = x + 1;
} else
{
x = x - 1;
}
if (j == 0)
{
y = y + 1;
} else
{
y = y - 1;
}
checkWalls();
}
void checkWalls()
{
if (x < size/2)
{
x = width - size/2;
}
if (x > width - size/2)
{
x = size/2;
}
if (y < size/2)
{
y = width - size/2;
}
if (y > width - size/2)
{
y = size/2;
}
}
void display()
{
noStroke();
if (!rdyBreed.finished)
{
fill(255, 0, 0);
} else
{
fill(0, 255, 0);
}
rect(x - size/2, y - size/2, size, size);
}
void increaseTimers()
{
updateBreedTimer();
}
void updateBreedTimer()
{
rdyBreed.increase(frameRate/1000);
rdyBreed.checkLimit(breedLimit);
rdyBreed.display(x, y);
}
}
计时器
class Timer
{
float t;
String name;
boolean finished = false;
Timer(String name, float t)
{
this.t = t;
this.name = name;
}
void increase(float step)
{
if (!finished)
{
t = t + step;
}
}
void checkLimit(float limit)
{
if (t >= limit)
{
t = 0;
finished = true;
}
}
void display(float x, float y)
{
textAlign(RIGHT);
textSize(12);
text(nf(t, 2, 1), x - 2, y - 2);
}
}
现在已经完成了,让我们来回答我的问题。
基本上,我正在尝试创建某种个人康威生命游戏,但我立即遇到了很多问题。
现在,我在编写这段代码时的想法是,组成小型模拟“社会”的每个人对于不同的生活事件都有不同的计时器和值,例如交配生 child 。
问题是,我不是面向对象编程的专家,因此我很不明白为什么这些对象没有各自的计时器,而是对同一个计时器的引用。
我猜想制作一个计时器的 ArrayList 并使用多态性来发挥我的优势可以做出改变,但我不太确定它或真正如何做到这一点......是的,我需要帮助。
提前致谢:)
编辑:这是调试器的屏幕截图。每次更新迭代时,这些值都保持相同。
最佳答案
是什么让您认为它们引用相同的 Timer 对象?调试器中显示的 t 值将保持不变,直到其中一个达到 breedLimit 并且被设置为 0,因为它们同时被初始化。 尝试一下,看看 t 的值为 different .
void setup() {
size(500,500);
}
void mouseClicked() {
individuals.add(new Individual());
}
我建议在此处设置断点:
t = 0;
finished = true;
关于java - 对象共享另一个对象(处理 3.3.7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908104/