PDA

Просмотр полной версии : Выравнивание mc относительно друг друга


desprit
04.11.2010, 21:57
Добрый день!

Появился вопрос, на который нигде не могу найти ответа... Как выровнять относительно друг друга несколько мувиклипов?
Необходимо силами кода.

То есть взять из библиотеки 4 mc, положить их на сцену, выровнять по центру сцены, а потом сказать, чтобы отступы между ними были, скажем, 20 пикселей.

Вариант сложить все 4 mc в один большой мувиклип и через Align тыркнуть в нем на 4 мелких mc не катит, нужно именно отдельно =(

Буду благодарен за любую помощь в деле!

Maxi_Hunter
04.11.2010, 22:39
То есть взять из библиотеки 4 mc, положить их на сцену
var myMC:myMC_form_lib = new myMC_form_lib();
stage.addChild(myMC);

выровнять по центру сцены
myMC.x = stage.stageWidth/2-this.width/2;

отступы между ними были, скажем, 20 пикселей
myMC2.y = myMC1.y+myMC1.height+20;
как-то так.

Добавлено через 1 минуту
Да, забыл добавить, что это все законно, при условии что центр каждого мувика в верхнем левом углу. Я это ввел за правило и уже не задумываюсь об этом)

desprit
05.11.2010, 13:32
Благодарю, это уже практически то, что нужно.
Единственный момент - после

myMC2.y = myMC1.y+myMC1.height+20;

теперь, когда на сцене два mc, мне нужно их обоих выровнять по центру.

В общем, пришлось немного помучиться, написать бог весть что, но получилось:


var mc1:Mc1 = new Mc1;
var mc2:Mc2 = new Mc2;
var mc3:Mc3 = new Mc3;

mc1.y = - (mc1.width + 20 + mc2.width + 20 + mc2.width) / 2;
var mc1Position = - (mc1.width + 20 + mc2.width + 20 + mc2.width) / 2;

mc2.y = mc1Position + mc1.width + 20;
var mc2Position = mc1Position + mc1.width + 20;

mc3.y = mc2Position + mc2.width + 20;


P.s. забыл сказать, mc1Position у меня записан с минусом, потому что отсчет ведется от середины сцены.

Итак, что мы получили, mc1 создается левее центра сцены, на 20 пх правее создается mc2, еще на 20 правее - mc3. Они втроем выровнены по ширине сцены.

Я просто надеялся, что можно избежать как-то этих танцев с бубном и сделать проще. С моими ограниченными знаниям AS3 приходится воротить такой вот огород

Maxi_Hunter
05.11.2010, 14:41
Ну это не танцы с бубном, а самое простое решения данной задачи)
Более грамотный подход - написать функцию, которой передавать как параметры объекты, их смещения и выравнивания.

Партизан
05.11.2010, 15:00
private function hAlign(mcArray:Array, hSpace:int = 20):void {
var widthSum:int = 0
for each (var i:MovieClip in mcArray){
widthSum += i.width
}
var wspace:int = widthSum + hSpace * (mcArray.length - 1);
var posX:int = (stage.stageWidth - wspace) / 2;
for (var j:int = 0; j < mcArray.length; j++){
var mc:MovieClip = mcArray[j] as MovieClip;
mc.x = posX
posX = posX + mc.width + hSpace;
}
}

Массив мувиков передайте в функцию

desprit
05.11.2010, 17:18
О, а вот это уже отлично!
Когда 2-3 объекта, еще не так страшно, а если их будет с десяток, то массивом на порядок проще!
Спасибо большое, буду осознавать теперь =)