Как вы, вероятно, знаете, (0,0) находится в верхнем левом углу холста Javascript и увеличивается по мере того, как вы спускаетесь и вправо. В начале вы устанавливаете x
и y
, так что render
делает ctx.translate(0,0)
, потому что x=canvas.width/2
и то же самое для y
. Проблема возникает, когда вы начинаете использовать клавиши со стрелками для перемещения. Например, когда вы нажимаете влево, вы уменьшаете значение x
. Это важно, потому что вы можете думать о translate
как о том, где находится источник холста (0,0). И это соответствует тому, что на самом деле происходит. При нажатии влево координата x
уменьшается, а начало координат (верхний левый угол карты) перемещается влево. Подобное происходит в направлении y
.
Это в основном то, что происходит при преобразовании функции. Подумайте о y=x^2
и о том, как y=(x-5)^2
смещается в вправо , даже если вы вычитаете из значения x
.
Чтобы исправить это, вы можете настроить функцию обновления следующим образом:
function update(){
if (38 in keysDown) { // Player holding up
y += speed;
}
if (40 in keysDown) { // Player holding down
y -= speed;
}
if (37 in keysDown) { // Player holding left
x += speed;
}
if (39 in keysDown) { // Player holding right
x -= speed;
}
}