ActionScript 3 Центрирование движущегося объекта на сцене Размеры

StackOverflow https://stackoverflow.com/questions/4221927

Вопрос

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

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

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

Movieclip только изменения в х.

Это было полезно?

Решение

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

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;
}

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

Другие советы

Я предпочитаю сделать контейнерный спрайт для всех содержимого. Внутри контейнера все измеряется, как будто сцена всегда была 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;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top