PDA

Просмотр полной версии : резиновая флэшка-сайт и не только


mtbio
04.06.2010, 16:38
Всем привет! Я тут после фатального освоения флэш-каталиста пришел к радостному выводу, что лучше родного простого флэша нет ничего. На меня нахлынули вдохновения и стали щекотать музы. Решил я замутить сайт, а какой же сайт если он не резиновый. Вот мыкался я по Google в поисках каких нить тайных знаний, но все, что нарыл не удобоперивариваемо и не работает. И решил создать тут тему.

Я создал флшку, в нее впихнул картиночку, заделал там кнопочки. Сразу оговорюсь, это будет прототип реального сайтика. Могут поменяться шрифты, картинка но не более. Вобщем, задача такова сейчас, надо сделать сайт резиночку (флэш-резинка).

Как это сделать не представляю, буду рад и ссылкам на уроки, и советам куда пойти, и темам, что почитать. Так что очень буду рад вашей помощи и участию

mtbio
04.06.2010, 16:42
вот сижу и думаю а может это все не на AS2, на AS3 замутить. Ваше мнение?

rainbowrussia
04.06.2010, 16:57
Stage.scaleMode = 'noScale'; // отключаем масштабирование содержимого
Stage.align = 'LT'; // устанавливаем "ноль" слева вверху
var w = Stage.width; // текущая ширина сцены
var h = Stage.height; // текущая высота сцены


Далее листнер на onResize, вычисление положения мувиков относительно текущей ширины и высоты.

mtbio
04.06.2010, 18:07
Так вроде разобрался ))))) Масштаб, константа выравнивания, присваиваем w и h значения текущей ширины - все супер. Теперь картинка в левом верхнем углу висит. А вот далее "листнер на onResize" - темный лесс )))))))))

rainbowrussia
04.06.2010, 18:58
var resizer:Object = new Object();
resizer.onResize = function () {
var sw = Stage.width;
var sh = Stage.height;
// позиционирование клипов
// функция вызывается каждый раз, когда меняются размеры сцены
}

resizer.onResize();
Stage.addListener(resizer);

mtbio
04.06.2010, 20:45
Я что то делаю не так походу ....
Картинка застряла в верхнем левом углу

rainbowrussia
04.06.2010, 22:18
Так вы ничего и не сделали, чтобы она куда-то двигалась. Я показал пример, вместо коментариев нужно и писать свои инструкции по позиционированию, предварительно присвоим имена клипам. Смотрите вложение.

mtbio
04.06.2010, 22:57
Понял. Посмотрел вложение. Куда дальше двигаться? Я ориентируюсь на вот такой результатhttp://fieroanimals.com/, без параллакс эффекта, просто картинка растягивается

rainbowrussia
04.06.2010, 23:21
без параллакс эффекта, просто картинка растягивается

Вам как надо, просто растягивается до размеров плеера либо с сохранением пропорций, но тогда слева и справа или сверху и снизу будут полосы при несовпадении пропорций окна браузера и размеров картинки? Либо можно сделать сохранение рпопорций, но "лишнее" будет отрезаться.

mtbio
04.06.2010, 23:38
Лишнее пускай отрезается. Думаю не будет больших проблем, что бы сюжетно подготовить картинку под обрезание, то есть оставить главных героев воронов, а остальное пускай режиться.

Еще как пример могу привести http://valeriya.net/, - это не флэш, но как реализован замут с картинкой по моему очень хорошо.

rainbowrussia
04.06.2010, 23:50
Лишнее пускай отрезается. Думаю не будет больших проблем, что бы сюжетно подготовить картинку под обрезание, то есть оставить главных героев воронов, а остальное пускай режиться.

Посмотрите вложение.

upd. Еще добавьте

mcImg.forceSmoothing = true;

где-нибудь.

mtbio
05.06.2010, 02:37
Просто супер!!! Спасибо за потраченное на меня время, я ваш должник.
У меня огромная просьба, если вас не затруднит расписать таким образом "var w = Stage.width; // текущая ширина сцены" скрипт. Понимаю, что это за геморрой, поэтому если "нет" то без претензий. объясню, я хотел бы понять, что за чем и почему, что бы в дальнейшем этим пользоваться. Спокойно менять и понимать, что за чем.

Еще раз спасибо!

rainbowrussia
05.06.2010, 02:50
Stage.scaleMode = 'noScale'; // отключаем масштабирование содержимого
Stage.align = 'TL'; // устанавливаем "ноль" слева вверху

// запоминаем исходную ширину и высоту картинки
var imgw = mcImg._width;
var imgh = mcImg._height;

// устанавливаем принудительное сглаживание картинки
mcImg.forceSmoothing = true;

// создаем объект с единственным методом - onResize
var resizer:Object = new Object();

resizer.onResize = function () {
var sw = Stage.width; // ширина сцены
var sh = Stage.height; // высота сцены

// позиционирование клипов
// тут идет математики, напрямую к флешу местами не относящаяся
if (sw/sh > imgw / imgh) { // если картинку надо будет обрезать по высоте
mcImg._x = 0; // левый край позиционируем на ноль по горизонтали
mcImg._width = sw; // ширину картинки вытсавляем по ширине сцены
mcImg._height = Math.round(sw * imgh / imgw); // выставляем высоту картинки, пропорционально ее изначальным размерам (чтобы не было искажения)
mcImg._y = Math.round((sh - mcImg._height)/2); // сдвигаем ее вверх на половину выступающей за пределы сцены части
} else {
// аналогичный алгоритм, если размер сцены таков, что у картинки надо обрезать левый и правй край
mcImg._y = 0;
mcImg._height = sh;
mcImg._width = Math.round(sh * imgw / imgh);
mcImg._x = Math.round((sw - mcImg._width)/2);
}
// mcImg._x = sx; - эти две строчки лишние, забыл их убрать
// mcImg._y = sy;
// позиционируем текстовые элементы
// в принципе их можно и не трогать, если они всегда слева вверху находятся
// и их положение не зависит от размера сцены
mcTxt1._x = mcTxt2._x = mcTxt3._x = 10;
mcTxt1._y = 20;
mcTxt2._y = mcTxt1._y + 50;
mcTxt3._y = mcTxt2._y + 50;
}

// вызываем один раз наш метод, чтобы выстроить элементы в соответствии с текущими размерами сцены
// очень может быть что onResize полюбому сам должен вызваться, но лишним не будет
resizer.onResize();

// добавляем к сцене "слушателя" событий в виде нашего объекта
Stage.addListener(resizer);