“Обнаружение столкновения JavaScript” Ответ

JavaScript обнаруживает столкновение

if (rect1.x < rect2.x + rect2.width &&
   rect1.x + rect1.width > rect2.x &&
   rect1.y < rect2.y + rect2.height &&
   rect1.y + rect1.height > rect2.y) {
    // collision detected!
}
Jolly Jaguar

Обнаружение столкновения JavaScript

function checkCollisions(x1, y1, w1, h1, x2, y2, w2, h2){
	if (x1 + w1 >= x2 && x1 + w1 <= x2 + w2 && y1 + h1 >= y2 && y1 + h1 <= y2 + h2) {
		return true;
	} else if (x1 >= x2 && x1 <= x2 + w2 && y1 >= y2 && y1 <= y2 + h2) {
		return true;
	} else {
		return false;
	}
}
Future games

Circle Collision JavaScript

/*
  You should call the function resolveCollsion, when a collision between two
  circles is detected.
*/

function rotate(velocity, angle) {
    const rotatedVelocities = {
        x: velocity.x * Math.cos(angle) - velocity.y * Math.sin(angle),
        y: velocity.x * Math.sin(angle) + velocity.y * Math.cos(angle)
    }

    return rotatedVelocities;
}

function resolveCollision(particle, otherParticle) {
  	/*
    	the particles passed as parameters should be objects with
       	x and y position,
        a velocity object with x and y values,
        a mass value
        as attributes
        example of a class:
        
        function Circle() {
    		this.x = x;
    		this.y = y;
    		this.velocity = {
            	x: 5,
                y: 5
            };
    		this.mass = 2;

		}
    */
    const xVelocityDiff = particle.velocity.x - otherParticle.velocity.x;
    const yVelocityDiff = particle.velocity.y - otherParticle.velocity.y;

    const xDist = otherParticle.x - particle.x;
    const yDist = otherParticle.y - particle.y;

    if (xVelocityDiff * xDist + yVelocityDiff * yDist >= 0) {
        const angle = -Math.atan2(otherParticle.y - particle.y, otherParticle.x - particle.x);

        const m1 = particle.mass;
        const m2 = otherParticle.mass;

        const u1 = rotate(particle.velocity, angle);
        const u2 = rotate(otherParticle.velocity, angle);

        const v1 = { x: u1.x * (m1 - m2) / (m1 + m2) + u2.x * 2 * m2 / (m1 + m2), y: u1.y };
        const v2 = { x: u2.x * (m1 - m2) / (m1 + m2) + u1.x * 2 * m2 / (m1 + m2), y: u2.y };

        const vFinal1 = rotate(v1, -angle);
        const vFinal2 = rotate(v2, -angle);

        particle.velocity.x = vFinal1.x;
        particle.velocity.y = vFinal1.y;

        otherParticle.velocity.x = vFinal2.x;
        otherParticle.velocity.y = vFinal2.y;
    }
}

/*
	source:
    https://youtu.be/789weryntzM
*/
Shy Skimmer

Ответы похожие на “Обнаружение столкновения JavaScript”

Вопросы похожие на “Обнаружение столкновения JavaScript”

Больше похожих ответов на “Обнаружение столкновения JavaScript” по JavaScript

Смотреть популярные ответы по языку

Смотреть другие языки программирования