命中检测问题

时间:2016-12-23 16:53:05

标签: javascript processing.js

我无法弄清楚为什么这个命中检测不起作用。我已经尝试更改>和宽度/高度值,但没有得到任何工作结果。我在检测中放置了一个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");
     }
}

该项目的背景故事多一点。基本上我有一个带有一个点列表(“粒子”)的数组,我希望它们有一个命中检测系统,这样它们就可以相互反弹并向相反的方向前进。

任何帮助将不胜感激!

最终工作代码:

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");
    }
 }

1 个答案:

答案 0 :(得分:2)

首先,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");
     }
}