如果我检查圆圈之间的碰撞,例如
int x2 = 100;
int y2 = 100;
int r2 = 10;
int count = 0;
boolean checkOnce = false;
void setup() {
size(200, 200);
}
void draw() {
background(0);
int x1 = mouseX;
int y1 = mouseY;
int r1 = 10;
if (!checkOnce){
checkCollision(x1, y1, r1);
}
drawCircle(x1, y1, r1);
drawCircle(x2, y2, r2);
textSize(32);
textAlign(CENTER, CENTER);
text(count, width/2, height/2-30);
}
void checkCollision(int x, int y, int r) {
if (dist(x, y, x2, y2) < (r + r2)) {
checkOnce = true;
count++;
//do something once;
} else {
count--;
}
}
void drawCircle(int x, int y, int r) {
ellipse(x, y, r*2, r*2);
}
当两个节点重叠时,每个帧都会触发此事件。我该怎么做一次 - 例如播放正弦波,然后一旦它们不再重叠就停止播放符号波?
编辑:我尝试实现建议的方法,但在第一次正面后它停止检查碰撞。如果我有布尔值重置它只是不断循环,好像根本没有布尔值。
答案 0 :(得分:0)
您可以使用新变量。例如。 boolean isAlreadyChecked = false
,并在checkCollision
if(!isAlreadyChecked) checkCollision(x1,y1,r1);
方法
void checkCollision(int x1, int y1, int r1){
isAlreadyChecked = true;
if (dist(x1, y1, x2, y2) < (r1 + r2)){
//do something once;
}
答案 1 :(得分:0)
我终于能够找到解决方案,虽然很乱。
它需要两个布尔值。将布尔值设置为相同的状态,然后在碰撞时修改它们。如果两个布尔值不再匹配,则运行代码,然后将它们设置为匹配。这将在每次更改时运行代码,但仍允许每帧调用该函数。 &GT;:)
为了您的观赏乐趣:
int x2 = 100;
int y2 = 100;
int r2 = 10;
int count = 0;
boolean checkOnce = false;
boolean toggle = false;
void setup() {
size(200, 200);
}
void draw() {
background(0);
int x1 = mouseX;
int y1 = mouseY;
int r1 = 10;
checkCollision(x1, y1, r1);
println("bool", checkOnce);
drawCircle(x1, y1, r1);
drawCircle(x2, y2, r2);
textSize(32);
textAlign(CENTER, CENTER);
text(count, width/2, height/2-30);
}
void checkCollision(int x, int y, int r) {
if (checkOnce != toggle) {
Counter(checkOnce);
toggle = checkOnce;
}
if (dist(x, y, x2, y2) < (r + r2)) {
checkOnce = true;
//do something once;
} else {
checkOnce = false;
}
}
void drawCircle(int x, int y, int r) {
ellipse(x, y, r*2, r*2);
}
void Counter(boolean Contact) {
if (Contact) {
count ++;
} else {
count --;
}
}