Пишу небольшую игру на стеке html, css, js (JQuery).
Пытаюсь запилить передвижение по карте.
Помогите скорректировать код для движение вверх и вниз героя.
$( document ).keypress(function(event) {
var positionCamera = $(".game-camera__map").css("transform");
// Объединить через регулярку
positionCamera = positionCamera.substr(19, );
positionCamera = positionCamera.replace(")", "");
// Позиция камеры относительно карты по X
var positionCameraX = positionCamera.replace(/[, ]\d*/ig, ""),
positionCameraX = Number(positionCameraX),
// Позиция камеры относительно карты по Y
positionCameraY = positionCamera.replace(/\d*[, ]/ig, ""),
positionCameraY = Number(positionCameraY);
if (event.charCode == 100) { // Right
positionCameraX = Number(positionCameraX - speedHero);
camera.css("transform", "translate("+ positionCameraX +"px, "+ positionCameraY +"px)");
} else if (event.charCode == 97) { // Left
positionCameraX = positionCameraX + speedHero;
camera.css("transform", "translate("+ positionCameraX +"px, "+ positionCameraY +"px)");
} else if (event.charCode == 115) { // Down
positionCameraY = positionCameraY - speedHero;
camera.css("transform", "translate("+ positionCameraX +"px, "+ positionCameraY +"px)");
} else if (event.charCode == 119) { // Up
positionCameraY = positionCameraY + speedHero;
camera.css("transform", "translate("+ positionCameraX +"px, "+ positionCameraY +"px)");
}
});
Ошибка где то в этих строчках.
Полный пример, тут:
https://codepen.io/AndreyMyP/pen/GdMEyP?editors=1010
Ошибка была в неправильном парсинге значения transform: translate.
При попытке узнать значение js,
выдавалось матричное значение, а именно:
Ввод:
$(".game-camera__map").css("transform");
Вывод:
"matrix(1, 0, 0, 1, 0, 0)"
typeof is str
Правильное решение:
Необходимо было матричную строку преобразовать в массив по символу "," после чего обратиться по элементу массива.
var positionCamera = $(".game-camera__map").css("transform");
var positionCamera = positionCamera.split('(')[1],
positionCamera = positionCamera.split(')')[0],
positionCamera = positionCamera.split(',');
// Позиция камеры относительно карты по X
var positionCameraX = positionCamera[4],
positionCameraX = Number(positionCameraX);
// Позиция камеры относительно карты по Y
var positionCameraY = positionCamera[5],
positionCameraY = Number(positionCameraY);
Решение взял из статьи:
https://css-tricks.com/get-value-of-css-rotation-through-javascript/
Решение на codepen!
https://codepen.io/AndreyMyP/pen/GdMEyP
Сборка персонального компьютера от Artline: умный выбор для современных пользователей