Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как сделать массив и выровнять его по центру? (http://www.flasher.ru/forum/showthread.php?t=140383)

serdeles 27.05.2010 19:37

Как сделать массив и выровнять его по центру?
 
Есть резиновый флеш. В нем несколько мувиков (предположим, mc1, mc2, mc3). Расстояние между ними изменяются по ширине в зависимости от размера экрана пользователя.

Нужно эти мувики расположить по горизонтальному центру сцены (как бы соединить их в группу и отцентровать). Подскажите, как это сделать.

Один массив в сцене уже имеется, но для моей задачи, судя по всему, надо создать новый массив, добавить в него мувики и прописать что-то наподобие

Код AS1/AS2:

массив._x = (Stage.width-массив._width)/2

В целом понимаю, но с синтаксисом AS у меня проблемы. Надеюсь, подскажете.

На всякий случай, код — в целом он примерно таков:

Код AS1/AS2:

Stage.scaleMode = "noScale";
Stage.align = "TL";
 
var resize_obj = {};
 
resize_obj.normal_width = 400;
resize_obj.normal_height = 300;
 
resize_obj.position = [mc1, mc2, mc3];
 
resize_obj.onResize = function()
{
    var clip;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = Stage.width*clip._xRatio;
        clip._y = Stage.height*clip._yRatio;
        if (clip._widthRatio != undefined) {
            clip._width = Stage.width*clip._widthRatio;
        }
 
        if (clip._heightRatio != undefined) {
            clip._height = Stage.height*clip._heightRatio;
        }
    }
};
 
Stage.addListener(resize_obj);
 
var clip;
for (var i in resize_obj.position) {
 
    clip = resize_obj.position[i];
    clip._xRatio = clip._x/resize_obj.normal_width;
    clip._yRatio = clip._y/resize_obj.normal_height;
}
 
mc1._Ratio = mc1.noScale;
mc2._Ratio = mc2.noScale;
mc3._Ratio = mc3.noScale;


rainbowrussia 27.05.2010 20:55

Что-то навроде этого:

Код AS1/AS2:

    var clip;
    var cwidth = 0;
    var cdist = 10; // расстояние между клипами
    // вычисляем ширину блока клипов
    for (var i in this.position) {
        clip = this.position[i];
        cwidth += clip._width;
    }
    cwidth += (this.position.length - 1) * cdist;
    // располагаем клипы слева направо
    var curpos = (Stage.width - cwidth) / 2;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = curpos;
        clip._y = (Stage.height - clip_height) / 2;
        curpos += clip._width + cdist;
    }

Во флеше не проверял, но должно работать. Алгоритм зависит от того, где находится точка привязки клипов. В этом коде я предположил что точка привязки - слева вверху. Общий смысл - считаем ширину всех блоков, добавляем интервалы между ними, начинаем располагать блоки слева направо, начиная с рассчитанной точки.

serdeles 28.05.2010 12:54

Спасибо. Но сейчас такая ситуация, что расстояние между клипами по ширине является не фиксированным, а резиновым (меняется при изменении ширины окна).

rainbowrussia 28.05.2010 14:49

Тогда я не понял что вам нужно.

Если нужно центровать, НО чтобы расстояние между ними было резиновым, то замените

Код AS1/AS2:

var cdist = 10;

на

Код AS1/AS2:

var cdist = Math.floor(Stage.width * 0.05);

тут расстояние будет 5% ширины.

serdeles 28.05.2010 14:52

Спасибо, буду пробовать.

rainbowrussia 28.05.2010 16:22

Если нужно чтобы расстояние между мувиками и краями экрана было равно, то код нужно немного модифицировать, если нужно именно так, то могу написать новый код.

serdeles 28.05.2010 16:58

Если вас не затруднит, то буду весьма благодарен за модификацию кода :-)

rainbowrussia 28.05.2010 18:05

Вложений: 1
Цитата:

Сообщение от serdeles (Сообщение 911597)
Если вас не затруднит, то буду весьма благодарен за модификацию кода :-)

Если точка привязки в клипах слева вверху, то вот код (во вложении исходник):

Код AS1/AS2:

Stage.scaleMode = "noScale";
Stage.align = "TL";
 
var resize_obj = {};
 
resize_obj.position = [mc1, mc2, mc3];
 
resize_obj.onResize = function() {
        var cdist = (Stage.width - this.cwidth) / (this.position.length + 1);
        var curpos = cdist;
    for (var i in this.position) {
        clip = this.position[i];
        clip._x = curpos;
        clip._y = (Stage.height - clip._height) / 2;
        curpos += clip._width + cdist;
    }
};
 
resize_obj.cwidth = 0;
for (var i in resize_obj.position) {
        resize_obj.cwidth += resize_obj.position[i]._width;
}
 
Stage.addListener(resize_obj);
 
resize_obj.onResize();
 
stop();


serdeles 31.05.2010 12:29

Спасибо!


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

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