Почему кажется, что моя переменная класса перезаписывается, когда я создаю новый объект из этого класса? - PullRequest
1 голос
/ 03 марта 2020

Когда я запускаю код, мой первый экземпляр Me, кажется, получает прямую переменную секундные копии, это не главное. Может кто-нибудь сказать мне, почему это происходит? В настоящий момент программа создает 3 круга в середине экрана, предположительно перемещаясь в 3 разных направлениях. Но два круга из класса пересекаются и движутся в одном направлении. Несмотря на то, что объекты изначально получали разные векторные координаты. Заранее большое спасибо :) Код:

PVector direct1 = new PVector(1,1);
PVector pos1;
ArrayList<Me> m; 
PVector di1 = new PVector(random(-1,1),random(-1,1));

void setup(){
 size(800,800);
 pos1 = new PVector(width/2,height/2);
 m = new ArrayList<Me>(0);
 for(int i =0; i< 2; i++){
   int a = int(random(-90,90));
  m.add(new Me(di1.rotate(radians(a)))); 
 }
}
void draw(){
 background(0); 
 fill(255);
 circle(pos1.x,pos1.y,50);
 pos1.add(direct1);
 for(int i =0; i< m.size(); i++){
  m.get(i).drawMe(); 
  m.get(i).move();
  //println(m.get(i).direct);
 }
}
class Me{
  PVector pos;
  PVector direct;
 Me(PVector oldDir){
  pos = new PVector(width/2,height/2);
  this.direct = oldDir;
  //this.direct.rotate(radians(random(-90-90)));
  println(direct);

 }
 void drawMe(){
   fill(60);
   circle(pos.x,pos.y,50);
 }
 void move(){
   //println(this.direct);
   pos.add(this.direct);
   println(direct);
 }
}

1 Ответ

3 голосов
/ 03 марта 2020

Оба Me объекта имеют одинаковый экземпляр из PVector.

Этот код демонстрирует проблему:

PVector a = new PVector(1, 1);
PVector b = a;
a.rotate(3.14);
println(b);

Чтобы решить эту проблему, следует вместо этого передать copy вектора:

PVector a = new PVector(1, 1);
PVector b = a.copy();
a.rotate(3.14);
println(b);
...