Мне было дано следующее задание, но я получаю сообщения об ошибках, которые можно увидеть при запуске фрагмента кода. Мне нужна помощь, чтобы понять, что именно я делаю неправильно.
По сути, мне нужно нарисовать круг, сделать так, чтобы он двигался и менял направление / цвет при прикосновении к стенам экрана.
Задача: создать класс Circle со следующими свойствами:
- x - начальное значение координаты x
- y - начальное значение координаты y
- радиус - значения ширины и высоты
- цвет - цвет заливки. Опишите методы:
- draw () - помечает на экране элемент, который описывается заданными свойствами
- setColor (newColor) - изменяет цвет заливки на новыйColor
- move ({x = 0, y = 0}) - перемещает захваченный объект на вектор (x, y) - каждый период времени (например, 100 мс) изменяется (добавляет \ вычитает)
до значений х и у соответственно. Когда круг сталкивается с любым
по краю экрана необходимо реализовать его зеркальное отражение
(изменить значение соответствующей координаты вектора на
напротив значения знака, и вызовите этот метод с новым
вектор) и генерировать событие столкновения, столкновение, которое фиксируется
на уровне документа. Повесить на это событие обработчик, который изменит
цвет заливки круга в другое (случайное) значение.
Движение происходит до тех пор, пока не будет вызван метод stop.
- stop () - останавливает круговое движение
Если была нажата кнопка Escape на клавиатуре, движение должно остановиться.
Я создал холст и установил перемещение рамки. Я нарисовал круг и попытался переместить его с помощью setInterval (), но похоже, что я теряю контекст.
let c = document.getElementById("mycanvas");
let ctx = c.getContext("2d");
let xinc = 1;
let yinc = 1;
class Circle {
constructor(xpos, ypos, radius, color) {
this.xpos = xpos;
this.ypos = ypos;
this.radius = radius;
this.color = color;
}
draw() {
ctx.beginPath();
ctx.arc(this.xpos, this.ypos, this.radius, 0, Math.PI * 2);
ctx.fillStyle = "red";
ctx.fill();
}
move(xpos, ypos) {
ctx.clearRect(0, 0, c.width, c.height);
ctx.beginPath();
this.draw();
xpos += xinc;
ypos += yinc;
console.log(xpos, ypos);
if ((this.xpos > c.width - this.radius) || (this.xpos < 0 + this.radius)) {
xinc = -xinc;
}
if ((this.ypos > c.height - this.radius) || (this.ypos < 0 + this.radius)) {
yinc = -yinc;
}
setInterval(this.move, 10);
//this.draw();
}
}
let circle = new Circle(200, 300, 50, "red");
circle.draw();
circle.move(200, 300);
<canvas id="mycanvas" width="1335" height="650" style="border: 1px solid"> </canvas>
Я только начинаю изучать события и DOM, пожалуйста, помогите мне правильно выполнить эту задачу