Я создал mc, который работает как моя карта и контролирует его, позволяя перемещать карту и перемещаться по ключевым точкам и увеличивать их при различных уровнях масштабирования.
I 'm используя scaleX и scaleY для масштабирования карты mc и список позиций x и y для правильного позиционирования карты для каждой ключевой точки.
Когда я хочу перейти в определенную область, я выполняю этот расчет (offsetX иoffsetY - центр экрана):
newX = posX * scale + offsetX;
newY = posY * scale + offsetY;
Затем я изменяю положение и масштаб карты, чтобы плавно масштабировать и переместить карту в правильное положение:
var tween = new TweenLite(_background, EASING_SPEED, {x:newX, y:newY,scaleX:scale.getScale(),scaleY:scale,ease:EASING_TYPE,onComplete:moveToComplete,onCompleteParams:[room]});
IТеперь нужно реализовать функцию увеличения / уменьшения масштаба, и это то, с чем я борюсь.Масштаб должен использовать центр экрана в качестве точки обзора для шкалы, поэтому я пытался что-то вроде следующего, чтобы получить правильное позиционирование:
var newX = offsetX - (offsetX - _background.x) * scale;
var newY = offsetY - (offsetY - _background.y) * scale;
Так что, на мой взгляд, этополучает расстояние от текущей позиции карты относительно центральной точки экрана (offsetX, offsetY), а затем масштабирует это расстояние до нового масштаба.
Однако, это явно неправильно, потому что это не работает, а расположение карты неверно.
Я также пытался использовать матрицу преобразования, чтобы получить правильные значения, но я знаю даже меньшео них и не получил правильных результатов.
function scale(target:MovieClip, center:Point, scale:Number):Point {
var m:Matrix = new Matrix();
m.translate(-center.x, -center.y);//move the center into (0,0)
m.scale(scale, scale);//scale relatively to (0,0) (which is where our center is now)
m.translate(center.x, center.y);//move the center back to its original position
return m.transformPoint(new Point());//transform (0,0) using the whole transformation matrix to calculate the destination of the upper left corner
}
Если бы кто-то мог пролить свет на то, где я иду не так, я был бы очень благодарен!