Actionscript 3 Центрирование движущегося объекта при изменении размера сцены - PullRequest
0 голосов
/ 19 ноября 2010

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

currentPage.x = ((stage.stageWidth/2) - (currentPage.width/2))

Можно ли использовать его смещение от 0 (левая сторона этапа «область просмотра») и использовать это смещение в центре?

мувиклип изменяется только по x.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2010

Я предпочитаю делать контейнерный спрайт для всего содержимого. Внутри контейнера все измеряется так, как если бы сцена всегда была 400x300 (или любого другого фиксированного размера, независимо от того, какое соотношение сторон вам нужно). Когда размер сцены изменяется, я изменяю размеры и центрирую только контейнер, чтобы уместиться внутри:

//not really tested because my real code is more complex, so watch out...
var bounds:Rectangle = container.getRect(null);
//scale factor to fit inside
var scaleFactor:Number = Math.min(stage.stageWidth / bounds.width, stage.stageHeight / bound.height);
container.scaleX = container.scaleY = scaleFactor; //scaling
//centering
container.x = (stage.stageWidth - container.width) * 0.5;
container.y = (stage.stageHeight - container.height) * 0.5;

Таким образом, вы можете обрабатывать любое количество клипов в контейнере, а не только один. Контейнер не использует все пространство экрана, но сохраняет соотношение сторон. Если вы хотите использовать все пространство экрана, вы должны продумать динамическое расположение сцены - то, что только вы можете сделать правильно.

0 голосов
/ 19 ноября 2010

Когда размер объекта изменяется, мы можем сказать, что его масштаб изменился.Весы хороши тем, что позволяют нам работать в процентах.Учитывая любое процентное изменение, мы можем применить такое же изменение к любому другому объекту, чтобы получить относительную позицию.Смотрите здесь:

var previousStageWidth:Number;

public function handleResize():void {
    //calculate the difference in stage with as a percentage
    var widthScale:Number = previousStageWidth / stage.stageWidth;

    //scale the x value by the same amount
    myDisplayObject.x *= widthScale;

    //update the previous value for the next resize
    previousStageWidth = stage.stageWidth;
}

Надеюсь, это сработает для вас.

...