В игре, которую я сейчас делаю, вы находитесь на карте, которая построена из узлов, и вы переходите на разные узлы, когда нажимаете на них.Моя текущая карта выглядит так (создается с two.js, это группа svg, где каждый круг и линия - это элемент пути svg, например:
<path transform="matrix(1 0 0 1 553 120)" d="M 8 0 C 8 2.02 7.085 4.228 5.656 5.656 C 4.228 7.085 2.02 8 0 8 C -2.021 8 -4.229 7.085 -5.657 5.656 C -7.086 4.228 -8 2.02 -8 0 C -8 -2.021 -7.086 -4.229 -5.657 -5.657 C -4.229 -7.086 -2.021 -8 -0.001 -8 C 2.02 -8 4.228 -7.086 5.656 -5.657 C 7.085 -4.229 8 -2.021 8 0 Z " fill="#003251" stroke="#ebebeb" stroke-width="1" stroke-opacity="1" fill-opacity="1" visibility="visible" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" id="19"></path>
И карта выглядит так:
Помеченный красным узлом является индикатором вашей текущей позиции в зоне / карте. Как я могу изменить положение группы SVG, чтобы текущая позиция игрока всегда была в центре смещения контейнера?вся карта влево / вправо / верх / низ и становится такой:
Используя следующую функцию, я могу изменить x, y координаты группы svg:
function shiftMap(id_attr, offsetX, offsetY) {
let elem = $(id_attr);
if (elem) {
let params = ' translate(' + offsetX + ',' + offsetY + ')';
elem.attr('transform', params);
}
}
У меня также есть функция для определения координат узла текущей позиции игрока, поэтому я попытался сделать:
//where playerPosX = X of the current player node location (red mark)
//and playerPosY = Y of the current player node location (red mark)
shiftMap("svgMapID", playerPosX, playerPosY);
К сожалению, позиция неточный и карта перемещается / перемещается везде, выходит за пределы контейнера и т. д. Любая помощь очень ценится. Спасибо!
Подсказка: это может быть возможно сделать через точку привязки twojs, но я не уверенкак. Больше информации здесь: https://two.js.org/#two-anchor