Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Выравнивание mc относительно друг друга (http://www.flasher.ru/forum/showthread.php?t=146341)

desprit 04.11.2010 21:57

Выравнивание mc относительно друг друга
 
Добрый день!

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

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

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

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

Maxi_Hunter 04.11.2010 22:39

Цитата:

Сообщение от desprit (Сообщение 947684)
То есть взять из библиотеки 4 mc, положить их на сцену

Код AS3:

var myMC:myMC_form_lib = new myMC_form_lib();
stage.addChild(myMC);

Цитата:

Сообщение от desprit (Сообщение 947684)
выровнять по центру сцены

Код AS3:

myMC.x = stage.stageWidth/2-this.width/2;

Цитата:

Сообщение от desprit (Сообщение 947684)
отступы между ними были, скажем, 20 пикселей

Код AS3:

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

как-то так.

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

desprit 05.11.2010 13:32

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

Код AS3:

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

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

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

Код AS1/AS2:

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

Код AS3:

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 объекта, еще не так страшно, а если их будет с десяток, то массивом на порядок проще!
Спасибо большое, буду осознавать теперь =)


Часовой пояс GMT +4, время: 03:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.