Давайте переменным и свойствам осмысленные названия.
Что за
qq
,
raysa
,
j
?
Сейчас этот неаккуратный код не работает, видимо, потому, что свойство
qq
у всех лучей рано или поздно становится
1
и у них перстают обновляться координаты.
Вместо 0 и 1 давайте логической переменной значения false и true. Назовите её как-то понятно, типа
isStopped
Например, так, точно тот же код, но немного чище и может понятнее:
spoilerconst ctx = document.getElementById("canvas").getContext("2d");
const gun = {
x: 10,
y: 10,
}
const rays = [];
const blocks = [];
for (let i = 0; i < 20; i++) {
rays.push({x: 0, y: 0,
angle: i,
radius: 0,
isStopped: false,
raysa: 0
});
}
blocks.push({x: 20, y: 20});
function draw() {
rays.forEach(ray => {
const radians = ray.angle / 180 * Math.PI;
if (!ray.isStopped) {
ray.x = Math.cos(radians) * ray.raysa + gun.x;
ray.y = Math.sin(radians) * ray.raysa + gun.y;
ray.radius = ray.raysa;
if (ray.x >= 100) ray.isStopped = true;
ray.raysa += 1;
if (ray.isStopped) {
ray.x = Math.cos(radians) * ray.radius + gun.x;
ray.y = Math.sin(radians) * ray.radius + gun.y;
}
}
ray.angle += 2;
if (i % 10 == 0) console.log(ray.angle);
ctx.clearRect(0, 0, 320, 320);
ctx.beginPath();
ctx.moveTo(gun.x, gun.y);
ctx.lineTo(ray.x, ray.y);
ctx.stroke();
});
}
//setInterval(draw,20);