2010-11-19 5 views
0

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

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

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

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

ответ

0

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

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

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

+0

таким образом вы будете накапливать ошибки при каждом изменении размера ... – alxx

+0

Какие ошибки вы считаете? Объясните, пожалуйста, вопрос. –

+0

нет, это не относится к движущемуся объекту. Забудь это :) – alxx

0

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

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

Смежные вопросы