HTML5 Javascript Canvas Collision
Spsoi
Posted on February 10, 2022
Читать снизу вверх
Статья будет дополнятся
//!* новые строки
Вычисляем пересечение двух кругов
jsfiddle.net
function animate() {
requestAnimationFrame(animate); // каждую секунду отрисовываем
c.clearRect(0,0, canvas.width, canvas.height); // удаляем предыдуший отрисованный кадр
circle1.update();
circle2.x = mouse.x;
circle2.y = mouse.y;
circle2.update();
let distance = getDistance(circle1.x, circle1.y, circle2.x, circle2.y); // !*
let touch = circle1.radius + circle2.radius;// !*
console.log( touch); // !*
if (distance < touch) { // !*
circle1.color = 'red';
} else {
circle1.color = 'black';
}
console.log(getDistance(circle1.x, circle1.y, circle2.x, circle2.y));
}
Вычисляем расстояние курсора до центра первого шара (Чёрный).
jsfiddle.net
function getDistance(x1, y1, x2, y2) { //!* расчёт дистанции до центра первого круга
let xDistance = x2 -x1; //!*
let yDistance = y2 -y1; //!*
let distance = Math.pow(xDistance, 2) + Math.pow(yDistance, 2); //!*// Теорема Пифагора
return Math.sqrt(distance); //!*// квадратный корень числа
}
function animate() {
requestAnimationFrame(animate); // каждую секунду отрисовываем
c.clearRect(0,0, canvas.width, canvas.height); // удаляем предыдущий отрисованный кадр
circle1.update();
circle2.x = mouse.x;
circle2.y = mouse.y;
circle2.update();
console.log(getDistance(circle1.x, circle1.y, circle2.x, circle2.y)); //!*
}
Отрисуем второй шарик прям.
jsfiddle.net
let circle1 ;
let circle2 ; //!*
function init() { // точка входа
//1
circle1 = new Circle(300, 300, 100, 'black');
circle2 = new Circle(undefined, undefined, 30, 'red'); //!*
}
function animate() {
requestAnimationFrame(animate); // каждую секунду отрисовываем
c.clearRect(0,0, canvas.width, canvas.height); // удаляем предыдущий от рисованный кадр
circle1.update();
circle2.x = mouse.x; //!*
circle2.y = mouse.y; //!*
circle2.update(); //!*
}
Отрисуем шар в центре канваса
jsfiddle.net
canvas = document.querySelector('#canvas');
let c = canvas.getContext('2d');
canvas.width = innerWidth;
canvas.height = innerHeight;
let mouse = {
x: innerWidth / 2,
y: innerHeight / 2
}
let colors = [
'#2185c5',
'#7ECEFD',
'#FFF6E5',
'#FF7F66'
];
document.addEventListener("mousemove", function(event){
mouse.x = event.clientX;
mouse.y = event.clientY;
});
addEventListener("resize", function(){ // при изменении окна растягиваем окно canvas
canvas.width = innerWidth;
canvas.height = innerHeight;
// init();
});
function randomIntFromRange(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
function randomColor (color){
return color[Math.floor(Math.random() * color.length)];
}
addEventListener("click", function () { // клик по экрану сбрасывает анимацию
init();
})
function Circle (x, y, radius, color) { // шарик
// 2
this.x =x;
this.y = y;
this.radius = radius;
this.color = color;
this.update = function() {
this.draw();
}
this.draw = function () {
c.beginPath();
c.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
c.fillStyle = this.color;
c.fill();
c.stroke();
c.closePath();
}
}
let ballArray;
let circle1 ;
function init() { // точка входа
//1
circle1 = new Circle(300, 300, 100, 'black');
}
function animate() {
requestAnimationFrame(animate); // каждую секунду отрисовываем
c.clearRect(0,0, canvas.width, canvas.height); // удаляем предыдуший отрисованный кадр
circle1.update();
}
init();
animate();
style.css
canvas {
border: 1px solid #000;
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<canvas id="canvas" width="300" height="300"></canvas>
<script src="canvas.js" ></script>
</body>
</html>
💖 💪 🙅 🚩
Spsoi
Posted on February 10, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.