Я создал игру Pong на JavaScript, используя элемент canvas. Просто чтобы расширить свои знания, я также добавил функцию для изменения размера холста следующим образом:
window.addEventListener("resize", OnResizeCalled, false);
function OnResizeCalled() {
canvas.style.width = window.innerWidth + 'px';
canvas.style.height = window.innerHeight + 'px'
var gameWidth = window.innerWidth;
var gameHeight = window.innerHeight;
var scaleToFitX = gameWidth / width;
var scaleToFitY = gameHeight / height;
var currentScreenRatio = gameWidth / gameHeight;
var optimalRatio = Math.min(scaleToFitX, scaleToFitY);
if (currentScreenRatio >= 1.77 && currentScreenRatio <= 1.79) {
canvas.style.width = gameWidth + "px";
canvas.style.height = gameHeight + "px";
}
else {
canvas.style.width = width * optimalRatio + "px";
canvas.style.height = height * optimalRatio + "px";
}
}
а затем я центрировал холст так:
canvas {
position: absolute;
top: 0px;
left: 0px;
transform: translate(-50%, -50%);*/
}
Когда я играл в игру, изменив размер браузера, размер игры также изменился правильно, но движение весла было неточным. Он не был правильно расположен с помощью мыши.
Я закодировал движение мыши так:
function playerBatMove(event) {
mouseY = event.clientY - canvas.offsetTop;
if (mouseY <= 19) {mouseY = 20};
if (mouseY+playerBat.batHeight >= height-19) {mouseY = (height-20)-playerBat.batHeight};
playerBat.y = mouseY;
};
Помимо этой проблемы с мышью, все остальное в порядке ... даже графика идеально масштабируется.
Есть ли проблема с тем, как я получаю координаты мыши, или в моей функции изменения размера есть ошибки? Любая помощь приветствуется.
Спасибо. Вы можете найти весь код здесь Игра в понг на CodePen
РЕДАКТИРОВАТЬ: я объявил ширину и высоту переменных в начале кода.
var height = 500;
var width = 700;
width
в строкеvar scaleToFitX = gameWidth / width;
height
есть аналогичная проблема. Обратите внимание, что все предупреждения в ручке кода затрудняют просмотр (компьютер всегда выигрывает). - person Mark Schultheiss   schedule 06.06.2016