PDA

Просмотр полной версии : резиновый дизайн - позиционирование от центра


AlexDesinger
10.09.2008, 23:02
Народ, помогите плиз, я пытаюсь выполнить урок на тему "резиновый дизайн", но не могу сделать чтобы все расчеты производились от центра флэшки, а не от верхнего правого угла ((((

Stage.scaleMode = "noScale";
Stage.align = "";

var resize_obj = {};
resize_obj.normal_width = 1920;
resize_obj.normal_height = 1200;
resize_obj.position = [square];

resize_obj.onResize = function() {
var clip;
for (var i in this.position) {
clip = this.position[i];
clip._x = ((Stage.width+resize_obj.normal_width)/2)*clip._xRatio;
clip._y = ((Stage.height+resize_obj.normal_height)/2)*clip._yRatio;
trace(clip._x);
trace(Stage.width);
}
};
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;
}

resize_obj.onResize();
При начальном позиционировании клип встает правильно, но при резсайзе немного съезжает, я уже перепробовал много вариантов, пытаясь задать правильную формулу просчета, но не могу сообразить как правильно.

MANN
10.09.2008, 23:25
может поможет если сделать вот так
Stage.align = "TL";?

gloomyBrain
10.09.2008, 23:26
в вашем коде Stage.align = "";
это означает, что центр флэшки отображается в центре окна плеера
Однако, при просмотре в браузере это не всегда так
Популярное решение: задать Stage.align = "tl", после чего в онРесайзе определять Stage.width и Stage.height и работать с полученными значениями

UPD:
mann... =)

AlexDesinger
10.09.2008, 23:36
в вашем коде Stage.align = "";
это означает, что центр флэшки отображается в центре окна плеера
Однако, при просмотре в браузере это не всегда так
Популярное решение: задать Stage.align = "tl", после чего в онРесайзе определять Stage.width и Stage.height и работать с полученными значениями
Вся загвоздка в том что мне нужно как раз чтобы центр флэшки был в центре окна браузера и не скейлился, для того, чтобы центр бэкграунда флэшки всегда был в центре сжатого со всех сторон окна.
А остальные клипы должны передвинуться в соответствии с новым размером окна.
Бэк позиционируется отлично - при любых сжатиях с любой стороны - он всегда в центре, ну а вот клипы съезжают и при сильном сжатии окна, вообще уезжают за пределы окна браузера.
Поблемма скорее всего с clip._xRatio, потому что это коэффициент сдвига клипа, но вот его-то я и не могу вычислить точно.

gloomyBrain
10.09.2008, 23:52
я бы на Вашем месте не мучился:
просто создайте мувик с фоном
просто положите его на самый нижний слой (програмно добавив к сцене)
просто действуйте как с остальными мувиками - через _xRatio

Правда ведь просто? =))

Сам этим занимался - Stage.align="" - очень странная тема...(для браузеров)

UPD
По поводу коэффициента сдвига - а что не получается?
Взяли мувик, приаттачили из библиотеки, задали координаты, эти координаты поделили на Stage.width и Stage.height соответственно. Задали новое свойство xRatio и yRatio. Далее свойства считываются при ресайзе, мувик перемещается.

AlexDesinger
11.09.2008, 00:01
да я так уже попробовал но это не то что мне нужно - дело в том что back не должен скейлиться, потому как растровый, иначе будут видны пикселы, а если не делать скейл, то при малом размере мы видим не центр его, а верхний левый угол.
можно конечно сделать так....
clip._x = ((Stage.width+resize_obj.normal_width)/2)-(clip._width);
clip._y = ((Stage.height+resize_obj.normal_height)/2)-(clip._height);
для того, чтобы спозиционировать клип и он всегда будет справа снизу, а бэк в центре, но тогда придется для всех клипов в сцене задать начальные координаты вручную.
Или можно все клипы попробовать запихнуть в один и его то спозиционировать от центра....хм

gloomyBrain
11.09.2008, 00:47
вот
ковыряйтесь =)