Функция обнаружения столкновений не позволяет программе рисовать более одного шара в массиве - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть фрагмент кода, который добавляет 10 массивов объектов, каждый с индивидуальными значениями (x, xvel, radius и т. Д.) В массив.Внутри объекта мяча я создал 4 функции: функцию рисования, функцию перемещения, функцию столкновения с мышью и функцию столкновения с мячом.Все эти функции работают успешно, кроме функции столкновения мяча.Это потому, что когда он добавлен в цикл выполнения, рисуется только один шарик, а остальные шарики невидимы.

    for(i = 0; i < balls.length;i++)
{
    balls[i].move()
    balls[i].draw()
    balls[i].mouse_collision()
    //This function is the reason for my quarrels, if I allow it to execute then no balls are drawn except for one however collisions are detected.
    //balls[i].checkbox() 
}

Несмотря на это, однако, столкновения все еще обнаруживаются, поэтому моя проблема в выяснениикак заставить столкновение и рисование работать одновременно.Код, используемый в функции флажка

this.checkbox = function() {
    //Attempt at collision function, loops through all other balls and 
    //if collision == true then the function executes, 
    //causing the balls to bounce of each other.
    for(i = 0; i < balls.length; i++)
    {
        if(collision(x,y,radius,balls[i].x,balls[i].y,balls[i].radius) && balls[i].id != id)
        {
            console.log("COLLISION")
            o_xvel = balls[i].xvel
            o_yvel = balls[i].yvel   
            balls[i].xvel = xvel
            balls[i].yvel = yvel
            xvel = o_xvel
            yvel = o_yvel
        }
    }

}

Ссылка на код в JSFiddle: https://jsfiddle.net/HatBreakingDad/fnzr51yq/

PS Извините, если мой английский был плохим, так как это не мой родной язык.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы перезаписываете другую переменную i.

Ограничьте их области действия, объявив их с помощью let, var или const.Например, замена

for(i = 0; i < balls.length; i++)

на

for(let i = 0; i < balls.length; i++)

подойдет.

Или вы можете просто переименовать их.

...