2D-зум, масштаб и перевод

Я пытаюсь создать метод изменения размера растрового изображения (с помощью Pinch Zoom), а затем центрировать его на экране. Но всякий раз, когда я уменьшаю масштаб, он уменьшается в верхнем левом углу, а когда я увеличиваю масштаб, он увеличивается в правом нижнем углу:

 public void ZoomIn() {
        TileMap.TileSize += 2;

        Position.x += 1;
        Position.y += 1;
    }

Я попытался компенсировать это, изменив положение спрайта, но это не сработало. Я не знаю соотношение.

Как вы масштабируете спрайт (растровое изображение) и оставляете его в одном и том же положении на экране (я думаю, он растет из центра)?


person GideonKain    schedule 29.11.2011    source источник


Ответы (1)


Рассмотрим по вертикали, затем по горизонтали.

Если ширина растрового изображения изменяется на +10 пикселей, то для центрирования по горизонтали в том же месте вам нужно сместить его положение на -5 пикселей.

То же самое по высоте. Сохранение предыдущего значения и текущего значения, вычисление разницы, сдвиг вправо на floor(widthDiff / 2) и сдвиг вверх на floor(heightDiff / 2).

person Martin Foot    schedule 29.11.2011