Вы можете использовать translate
, чтобы переместить весь холст на количество пикселей.Все элементы на холсте будут двигаться вместе с ним.
В этом ответе для перемещения используются клавиши WASD.Но вместо перемещения плеера весь холст смещается.Чтобы игрок появлялся в центре, мы отслеживаем переменные X и Y, противоположные смещению холста.
Вы также можете использовать transform
для масштабирования всего холста.
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
let playerX = 130;
let playerY = 90;
// by using translate we move the entire world
function moveWorld(key){
switch (key) {
case "a" :
ctx.translate(10, 0);
playerX -= 10;
break;
case "d" :
ctx.translate(-10, 0);
playerX += 10;
break;
case "w" :
ctx.translate(0, 10);
playerY -= 10;
break;
case "s" :
ctx.translate(0, -10);
playerY += 10;
break;
}
drawWorld();
}
// the world elements have fixed positions
function drawWorld(){
ctx.clearRect(0, 0, 600, 400);
// world
ctx.fillStyle = 'red';
ctx.fillRect(10, 10, 50, 50);
ctx.fillRect(110, 30, 50, 50);
// player
ctx.fillStyle = 'green';
ctx.fillRect(playerX, playerY, 20, 20);
}
document.addEventListener('keydown', (event) => {
moveWorld(event.key);
});
drawWorld();
<canvas id="canvas" width="600" height="400"></canvas>