Javascript 我应该把这个条件放在哪里?

Javascript 我应该把这个条件放在哪里?,javascript,html,canvas,Javascript,Html,Canvas,在本项目的最后一步中,我希望不断增长的圆在与另一个圆碰撞时停止。创建新圆时,isOnCircle功能已成功检查此情况。但是,在添加条件时!isOnCircle到mygrow()函数(第61行),它防止添加任何新的圆圈 function grow() { var a = circles[circles.length - 1]; if (!isOnCircle(a)){ a.radius += 1; }} 可能是先创建圆,然后在碰撞检查中,它与自身碰撞。我还

在本项目的最后一步中,我希望不断增长的圆在与另一个圆碰撞时停止。创建新圆时,
isOnCircle
功能已成功检查此情况。但是,在添加条件时
!isOnCircle
到my
grow()
函数(第61行),它防止添加任何新的圆圈

function grow() {
    var a = circles[circles.length - 1];
    if (!isOnCircle(a)){
        a.radius += 1;
    }}
可能是先创建圆,然后在碰撞检查中,它与自身碰撞。我还可以把它放在哪里呢!isOnCircle检查,以便在每次半径增加时检查,然后停止增长功能?

//设置画布
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var循环=[];
//创建圆
函数创建(位置){
推({
x:location.x,
y:地点,y,
半径:10,
颜色:'#'+Math.floor(Math.random()*16777215).toString(16)
});
}
//找出鼠标的位置
var rect=document.getElementById(“画布”).getBoundingClientRect();
//获取页面上的画布偏移量
变量偏移={
x:rect.left,
y:rect.top
};
功能isOnCanvas(a){
如果((a.x>=0&&a.x=0&&a.y
它在和自己碰撞

可能吧。在碰撞检测中,您绝对应该避免:

function isOnCircle(a) {
    var l = circles.length,
        x, y, d, c;
    for (var i = 0; i < l; ++i) {
        c = circles[i];
        if (a == c)   // add these
            continue; // two lines!
        x = a.x - c.x;
        y = a.y - c.y;
        d = (a.radius || 10) + c.radius;
        if (x * x + y * y <= d * d) {
            return true;
        }
    }
    return false;
}
函数isOnCircle(a){
var l=圆的长度,
x、 y,d,c;
对于(变量i=0;i如果(x*x+y*y它与自身发生碰撞。因为您知道当前圆将始终是圆中的最后一个圆,所以可以按如下方式修改isOnCircle:

l = circles.length - 1,
这样它就不会检查当前的圆


您到底在哪里添加了条件?您还可以突出显示“第61行”加上注释…添加了建议的函数更改,谢谢!这与Bergi在上面检查a==c有相同的效果,对吗?现在尝试两种方法。是的,应该是一样的。我只是不喜欢continue语句。如果碰撞测试不仅在创建圆之后进行(例如,在增大圆时也进行,就像OP计划的那样),这将不再起作用。@scf1001:如果你不喜欢
继续
,你也可以编写
如果(a!=c){x=a.x-c.x;…}/*直到循环体结束*/
是的,公平点,但我们知道当前的循环(正在增长的循环)将是圆圈数组中的最后一个项目。通过避免在该项目中循环,我们可以避免检查当前圆圈。它仍然有效。
l = circles.length - 1,