Форум 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=79821)

SINtez_v 17.05.2006 02:22

Поиск юзал ?
http://flasher.ru/forum/showthread.p...light=onResize
И в хелпе про onresize класно всё написано.

Olejan 17.05.2006 02:47

Stage.onResize Вызывается, когда Stage.scaleMode имеет значение "noScale" и ролик маштабируется.
Stage.onResize = "noScale" - это я прописал!
Но надо чтобы не только когда ролик масштабируется, а всегда вызывался. точнее сначала бы вызвался, а потом при масштабировании...

Olejan 17.05.2006 02:48

То есть прописано:
Stage.scaleMode = "noScale"

0xFFFFFF 17.05.2006 05:01

Цитата:

Сообщение от Olejan
Stage.onResize Вызывается, когда Stage.scaleMode имеет значение "noScale" и ролик маштабируется.
Stage.onResize = "noScale" - это я прописал!
Но надо чтобы не только когда ролик масштабируется, а всегда вызывался. точнее сначала бы вызвался, а потом при масштабировании...

чтобы вызывался в начале мы делаем подписчика на метот onResize а потом сразу вызываем этот метод onResize();
в первом кадре
Код:

Stage.align = "noScale"
var onResizeObj = new Object();
onResizeObj.onResize = function () {
        // выполняется при изменении размеров
}
//
Stage.addListener(onResizeObj);
onResizeObj.onResize();


Olejan 17.05.2006 13:45

У меня прелоадер (только прелоадер) в первом карде, а ВСЕ остальные объекты, которые должны растягиваться и масштабироваться во 2-м кадре. Так вот если я в обоих кадрах делаю одинаковый код для растягивания, если меняю название объекта (в пером кадре onResizeObj, во втором onResizeObject), если ставлю код только во 2-ой кадр (чтобы прелоадер не позиционировался, зато все остальное позиционировалось!!!) - эффекта никакого! :( только прелоадер, когда находится в первом кадре для него код позиционируется, а во втором кадре начинает позиционироваться ВСЕГДА только после первого изменения габаритов окна! Что же делать?
P.S. Причем только в первый кадр код я поместить не могу, т.к. все объекты находятся во втором!
Подскажите пожалуйста.

etc 17.05.2006 13:51

Так напиши во втором, ё-моё...

Olejan 17.05.2006 13:57

Я же говорил, что даже если пишу только во втором - эффекта нет!
Пока не изменю габариты окна - позиционирования нет. А в первом прелоадер почему-то позиционируется! Во втором кадре - чтобы я не делал - начинает все позиционироваться только после изменения габаритов окна.

etc 17.05.2006 15:04

Покажи код.

Olejan 17.05.2006 17:07

Первый кадр с прелоадером:
Код:

// настройки сцены
Stage.scaleMode = "noScale";
Stage.align = "TL";

// создадим объект для реагирования на изменение габаритов окна
var resize_obj = {};

// запомнили нормальную ширину
resize_obj.normal_width = 1020;

// запомнили нормальную высоту
resize_obj.normal_height = 587;

// самое главное: список объектов, которые будем перемещать
resize_obj.position = [preloader];

// собственно, реакция на изменения габаритов окна
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 и объектом resize_obj
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;
}

Второй кадр со всеми объектами:
Код:

// создадим объект для реагирования на изменение габаритов окна
var resize_object = {};

// запомнили нормальную ширину
resize_object.normal_width = 1020;

// запомнили нормальную высоту
resize_object.normal_height = 587;

// самое главное: список объектов, которые будем перемещать
resize_object.position = [equ,
                                          mcF,
                                          Logo,       
                                          mcMenu,       
                                          mcM,
                                          mcLogo
                                          mcFil
                                          mcLi
                                                      mcAdd
                                          tpers,       
                                          mcFo
                                          mcCu
                                          razrab,
                                          mcR
                                          ];

// собственно, реакция на изменения габаритов окна
resize_object.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;
        }
                // для "обычного" ролика: пропорционально
                if (Stage.width/Stage.height<resize_object.normal_width/resize_object.normal_height) {
                        mcR._width = Stage.width*mcR._widthRatio;
                        mcR._yscale = mcR._xscale;
                        mcF._width = Stage.width*mcF._widthRatio;
                        mcF._yscale = mcF._xscale;
                        mcM._width = Stage.width*mcM._widthRatio;
                        mcM._yscale = mcM._xscale;  }
                else {
                        mcR._height = Stage.height*mcR._heightRatio;
                        mcR._xscale = mcR._yscale;
                        mcF._height = Stage.height*mcF._heightRatio;
                        mcF._xscale = mcF._yscale;
                        mcM._height = Stage.height*mcM._heightRatio;
                        mcM._xscale = mcM._yscale;
                        }
                       
    }
};
// связь между классом Stage и объектом resize_object
Stage.addListener(resize_object);

/* запоминаем пропорции координат
(отношение координат к нормальной ширине/высоте) */
var clip;
for (var i in resize_object.position) {
    // перебираем все клипы в списке
    clip = resize_object.position[i];

    // пропорция координаты по горизонтали
    clip._xRatio = clip._x/resize_object.normal_width;

    // пропорция координаты по вертикали
    clip._yRatio = clip._y/resize_object.normal_height;
}

/* запоминаем пропорции высоты и ширины
(отношение габарита к нормальной ширине/высоте) */
mcR._widthRatio = mcR._width/resize_object.normal_width;
mcR._heightRatio = mcR._height/resize_object.normal_height;
mcF._widthRatio = mcF._width/resize_object.normal_width;
mcF._heightRatio = mcF._height/resize_object.normal_height;
mcM._widthRatio = mcM._width/resize_object.normal_width;
mcM._heightRatio = mcM._height/resize_object.normal_height;

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

etc 17.05.2006 17:14

Добавь в первом и во втором кадре в конце:
resize_object.onResize();

Именно тебе об этом пытаются сказать всю тему.


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

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