ActionScript 3 Центрирование движущегося объекта на сцене Размеры
-
26-09-2019 - |
Вопрос
Я хочу в центре большого мовиеквелипа (шириной 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;
Таким образом, вы можете обрабатывать любое количество клипов в контейнере, а не только один. Контейнер не использует все экранное пространство, но консервирует соотношение сторон. Если вы хотите использовать все экранное пространство, вы должны подумать о динамичной макете своей сцены - что-то только вы можете сделать правильно.