如何让相同class的对象相互交互?

How to make objects of the same class interact with each other?

我有一个 class 部分和来自这个 class 第 1 部分和第 2 部分的两个对象。我希望能够让这些对象在使用方法发生碰撞时相互弹开。我可以使用 class 之外的函数来执行此操作,但希望能够使用纯粹在 class 内部的方法来执行此操作,因此我可以添加对象而不必将每个对象添加到我的 watchforpartcollision功能。

这是有效的代码,但我希望该函数是一个方法:

void draw() {
  background(255);
  part1.drawpart();
  part2.drawpart();
  part1.watchforcollision();
  part1.applymovement();
  part2.watchforcollision();
  part2.applymovement();
  watchforpartcollision(); //function I would like to make a method
}
...
void watchforpartcollision() {
  if (dist(part1.x + part1.size/2, part1.y + part1.size/2,
  part2.x + part2.size/2, part2.y + part2.size/2) <= (part1.size)) {
      partcolide();
    }
}
void partcolide() {
  part1.xspeed = (part1.xspeed * part2.oldxspeed) + part2.oldxspeed;
  part1.yspeed = (part1.yspeed * part2.oldyspeed) + part2.oldyspeed;
  part2.xspeed = (part2.xspeed * part1.oldxspeed) + part1.oldxspeed;
  part2.yspeed = (part2.yspeed * part1.oldyspeed) + part1.oldyspeed;
}

这就是我想要的:

void draw() {
  background(255);
  drawcursor();
  part1.drawpart();
  part2.drawpart();
  part1.watchforcollision(); //method I would like to add function too
  part1.applymovement();
  part2.watchforcollision(); //method I would like to add function too
  part2.applymovement();
}
...
class Part {
 ... 
  void watchforcollision() {
    ...
    if (dist(x + size/2, y + size/2, x + size/2, y + size/2) <= (size)) {
/*This ^ is the line that messes it up because it's checking the distance
  between the same two things*/
      partcolide();
      }
  }
  ...
  void partcolide() {
    xspeed = (xspeed * oldxspeed) + oldxspeed;
    yspeed = (yspeed * oldyspeed) + oldyspeed;
    xspeed = (xspeed * oldxspeed) + oldxspeed;
    yspeed = (yspeed * oldyspeed) + oldyspeed;
  }
}

Any help would be much appreciated!
Thank you!

如果你想将碰撞逻辑移动到class,那么你需要在调用方法时传入你想要碰撞的对象:

part1.watchforcollision(part2);

里面class:

void watchforpartcollision(Part obj) { // `obj` is the Part object passed in
  if (dist(x + size/2, y + size/2,
  obj.x + obj.size/2, obj.y + obj.size/2) <= (size)) {
      partcolide();
      obj.partcolide(); // apply the collision to the second object too
    }
}