如何让相同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
}
}
我有一个 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
}
}