Я создаю 2D-игру с мячом и платформой на JavaScript. Цель состоит в том, чтобы мяч отскочил от платформы при столкновении. Коллизии сверху и снизу работают нормально, но коллизии слева и справа не работают. Я использую простую функцию для проверки пересекающихся прямоугольников.
Вот ключевые детали:
- Мяч движется со скоростью VelocityX и SpeedY.
- Столкновения обнаруживаются с помощью функции обнаружения столкновений.
- Для боковых столкновений я добавил дополнительные условия (leftCollision и rightCollision), но они никогда не срабатывают.
let board;
let boardWidth = 200;
let boardHeight = 200;
let context;
let playerWidth = 80;
let playerHeight = 10;
let playerVelocity = 10;
let player = {
x : boardWidth / 2 - playerWidth / 2,
y : boardHeight - playerHeight - 5,
width : playerWidth,
height : playerHeight,
velocity : playerVelocity
};
let ballWidth = 10;
let ballHeight = 10;
let ballVelocityX = -2;
let ballVelocityY = 1;
let ball = {
x : boardWidth / 2,
y : boardHeight / 2,
width : ballWidth,
height : ballHeight,
velocityX : ballVelocityX,
velocityY : ballVelocityY,
}
function outOfBounds(xPosition) {
return (xPosition < 0 || xPosition + player.width > boardWidth);
}
function playerMove(event) {
let mouseX = event.clientX - board.offsetLeft;
let nextPlayerX = mouseX - player.width / 2;
if (!outOfBounds(nextPlayerX)) {
player.x = nextPlayerX;
}
}
// Обнаружение колизии
function detectCollision(rectA, rectB) {
return (
rectA.x < rectB.x + rectB.width &&
rectA.x + rectA.width > rectB.x &&
rectA.y < rectB.y + rectB.height &&
rectA.y + rectA.height > rectB.y
);
}
function topCollision(ball, block) {
return detectCollision(ball, block) && (ball.y + ball.height) >= block.y;
}
function bottomCollision(ball, block) {
return detectCollision(ball, block) && ball.y = block.x;
}
function rightCollision(ball, block) {
return detectCollision(ball, block) && ball.x
Подробнее здесь: https://stackoverflow.com/questions/793 ... cript-game
Мобильная версия