命中检测问题
Hit detection issue
我不明白为什么命中检测不起作用。我试过更改 > 和 width/height 值,但没有得到任何工作结果。我在检测中放置了一个 println() 函数,以确保它不是内部不起作用的函数。
代码:
for(var b = 0; b < particles.length; b++) {
if(particles[a] === particles[b]) {
b++;
/*particle[a][3] OR particle[b][3] shows the x point.*/
/*particle[a][4] OR particle[b][4] shows the y point.*/
/*a is defined in a for loop just like the for loop above (for b).*/
} else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
项目的更多背景故事。基本上我有一个包含点列表 ("particles") 的数组,我希望它们有一个命中检测系统,这样它们就会相互反弹并朝相反的方向前进。
如有任何帮助,我们将不胜感激!
最终工作代码:
for(var b = 0; b < particles.length; b++) {
if(a !== b && particles[a][3] > particles[b][3]-10 && particles[a][3] < particles[b][3]+10 && particles[a][4] > particles[b][4]-10 && particles[a][4] < particles[b][4]+10) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
首先,particles[a] === particles[b]
表示,并且只有在a === b
时才为真
其次,当 particles[a] === particles[b]
你递增 b 时,for 循环再次递增 b ...意味着你错过了一个粒子!!
试试这个:
for(var b = 0; b < particles.length; b++) {
if(a === b) {
continue;
} else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
甚至
for(var b = 0; b < particles.length; b++) {
if (a !== b && particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
我不明白为什么命中检测不起作用。我试过更改 > 和 width/height 值,但没有得到任何工作结果。我在检测中放置了一个 println() 函数,以确保它不是内部不起作用的函数。
代码:
for(var b = 0; b < particles.length; b++) {
if(particles[a] === particles[b]) {
b++;
/*particle[a][3] OR particle[b][3] shows the x point.*/
/*particle[a][4] OR particle[b][4] shows the y point.*/
/*a is defined in a for loop just like the for loop above (for b).*/
} else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
项目的更多背景故事。基本上我有一个包含点列表 ("particles") 的数组,我希望它们有一个命中检测系统,这样它们就会相互反弹并朝相反的方向前进。
如有任何帮助,我们将不胜感激!
最终工作代码:
for(var b = 0; b < particles.length; b++) {
if(a !== b && particles[a][3] > particles[b][3]-10 && particles[a][3] < particles[b][3]+10 && particles[a][4] > particles[b][4]-10 && particles[a][4] < particles[b][4]+10) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
首先,particles[a] === particles[b]
表示,并且只有在a === b
其次,当 particles[a] === particles[b]
你递增 b 时,for 循环再次递增 b ...意味着你错过了一个粒子!!
试试这个:
for(var b = 0; b < particles.length; b++) {
if(a === b) {
continue;
} else if(particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}
甚至
for(var b = 0; b < particles.length; b++) {
if (a !== b && particles[a][3]+10 > particles[b][3] && particles[a][3]-10 < particles[b][3] && particles[a][4]+10 > particles[b][4] && particles[a][4]+10 < particles[b][4]) {
var temp = particles[a][5];
particles[a][5] = particles[b][5];
particles[b][5] = temp;
println("hi");
}
}