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

Challenger 17.01.2010 12:34

Резиновый Флэш с ориентацией по центру.
 
Доброе время суток!
Занимался флэшем на делитантском как теперь понял уровне раньше.
Тут нада сделать резиновый баннер, проблема в том, что элементы мувика уже анимированы и двигаются по центру баннера с фиксированной шириной. Нужно слева и справа поидее продлить черный фон у баннера(слева и справа от фикс. ширины).
Пробовал поотдельности посчитать ширину и продлить фон квадратика слева и справа по примеру http://noregret.org/tutor/elastic/. Но не оч получилось, точнее ноль реакции вообще. Сейчас есть идея (если это возможно) объединить баннер в 1 мувиклип и закинуть его в другой баннер, в котором бы был черный фон, растягивающийся по горизонтали в зависимости от размеров окна и поверх него поцентру этот мувиклип который через AS тоже отцентровать.
Следовательно вопросы:
1) Как запихнуть баннер в мувиклип(что то типа аналога Smart Object в Photoshop), назначить ему имя и возможно ли это?
2) Может есть какое-то другое более логичное решение?
3) Ниже приведу код, которым собираюсь организовывать это все, может там тоже что-то нада поправить:
Код AS1/AS2:

Stage.scaleMode = "noScale";
 
// создадим объект
Listener1 = {};
// создадим метод onResize
Listener1.onResize = function () {
bg._width = Stage.width;
clip._x = (Stage.width/2) - clip._width;
}
 
Stage.addListener(Listener1);

Где clip - имя мувиклипа который объеденен, bg - имя прямогульник под ним(автофигуры).

Поиск юзал, искал не только на этом форуме(ключ: "резиновый") но и ... да где тока не искал. Буду очень благодарен за помощь и совет. Слой для AS создавал подо всеми слоями и в первом кадре писал этот код.

Добавлено через 11 часов 21 минуту
Поставим вопрос по-другому, я кидаю исходник уже готового баннера но с фиксированной шириной. Нужно поместить этот баннер на тянущийся в ширину фон по середине. Цена вопроса 10$.

Добавлено через 33 часа 51 минуту
Сделал сам, работает почти так как нада, но не совсем.
При загрузке Флэш-баннера он не ратсягивается на 100%, а когда начинаешь менять ширину окна, Флэшка делает все как нада - центруется и продливает фон. Сделано по принципе который я опсиал выше:
1) я создал фон - это черный прямоугольник
2)поверх фона создал прозрачнй прямоугольник шириной на всю сцену(950пх), конвертил егов мувиклип,обозвал, и запихнул в него все что должно происходить по центру мувика.
3) Созда еще один слой в первом кадре AS-ом оцентровал мувиклип с пункта №2 и растянул на ширину Stage.width черный прямоугольник.

Почему так сранно работает? Как сделать что бы все что происходит у меня при изменении размеров окна происходило сразу же при загрузке Флэш-баннера?:wacko:

nondescript 19.01.2010 01:29

У меня такая же проблема, только я разворачиваю на весь экран командой fscommand("fullscreen",true);
и естественно все объекты растягиваются :(

Как бы от этого избавиться и сохранить пропорции?

mooncar 19.01.2010 11:13

Цитата:

Сообщение от nondescript (Сообщение 880105)
У меня такая же проблема, только я разворачиваю на весь экран командой fscommand("fullscreen",true);
и естественно все объекты растягиваются :(

Как бы от этого избавиться и сохранить пропорции?

Stage.scaleMode = 'noscale'; разве не препятствует растяжению объектов ролика?

Используйте уменьшение масштаба / сокрытия нужных элементов при переходе в полный экран и восстановления до 100% других, ради которых полный экран и затевается. Я делал плеер, приведу пример оттуда. Это там реализован именно так, когда фильм раскрывается во весь экран. При этом при добавлении видеообъекта я задал ему область во всю сцену, а потом в нормальном режиме сократил до 40%. Когда идет раскрытие во весь экран, функция просто восстанавливает его масштаб до родного 100%. А поскольку при этом видеообласть занимала всю сцену (при монтаже так было сделано), то фильм просто стал занимать весь экран.

При выходе из режима fullscreen область видео опять занимает 40% и при этом выглядит так, как было задумано в нормальном режиме.
То есть принцип такой - создавайте все объекты так, как они будут выглядеть в режиме "во весь экран", а потом делайте им обратное масштабирование с уменьшением так, чтобы их размеры были как в нормальном режиме. Напишите аналогичную функцию, которая бы управляла масштабированием.

Привожу код ради идеи.
Код AS1/AS2:

var stageListener:Object = new Object();
Stage.addListener(stageListener);
stageListener.onFullScreen = fScreen;
 
/// ОТРАБОТКА ПОЛНОГО ЭКРАНА ////////////////////////////////////
function fScreen(bFull:Boolean) {
        if (bFull) {
                player_mc.video_cont._xscale = player_mc.video_cont._yscale = 100;
        }
        else {
                player_mc.video_cont._xscale = player_mc.video_cont._yscale = 40;
        }
 
}
 
fsb.onRelease = function() {
        Stage.displayState = 'fullscreen';
};
 
closefs_btn.onRelease = function  () {
        Stage.displayState = 'normal';
};


Challenger 19.01.2010 23:44

я полностью разобрался со своим вопросом, пришлось дописать еще одного слушателя и еще одну функцию для изменения рулика после загрузки.

nondescript 20.01.2010 19:44

Цитата:

Сообщение от mooncar (Сообщение 880152)
Stage.scaleMode = 'noscale'; разве не препятствует растяжению объектов ролика?

Я сделал по другому, всего 4 строки. У меня задача была развернуть на весь экран бэкграунд а обьекты оставить в исходном размере.
Код AS1/AS2:

fscommand("fullscreen",true); // запускает на весь экран
fscommand("allowscale",false); // запрещаем растягивание
fscommand("showmenu",false); // убераем меню
fscommand("trapallkeys",true); // запрещаем КЛАВИАТУРУ (Esc и сочетания)


tanjasun 26.01.2010 16:19

Кто знает как сделать, чтобы баннер растягивался в обе стороны только по ширине, а высота оставалась фиксированной? На сайте резиновая вёрстка, нужно как-то баннер растянуть, чтобы не смотрелся заплаткой.

mooncar 26.01.2010 16:27

Попробуйте сделать на странице блок с шириной 100% и опубликовать в него флешку, ей также для публикации выставить 100% ширины.

tanjasun 26.01.2010 16:38

В том и вопрос: как сделать у флеша 100% ширины без изменения высоты? В настройках ширина в процентах не задаётся.

Добавлено через 7 минут
Только не нужно советовать задать в поиске "резиновый" и давать ссылку на пример - http://noregret.org/tutor/elastic/ - в этом примере баннер просто растягивается на весь экран по высоте и ширине так, что все объекты деформируются.

mooncar 26.01.2010 16:52

Да, действительно, вместе не получается.
Но есть решение. Сейчас сформулирую.

Добавлено через 23 минуты
Есть варианты, зависящие от сценария растягивания.
Вопрос вам - что у вас должно растягиваться по ширине при растягивании баннера?
1) Во флешке есть фон с повторяющимися элементами, и они должны размножаться вправо и влево от основного сюжета?
2) Или фон во флешке однородный и может быть деформирован в ширину при растяжении, а базовый сюжет - нет?

Добавлено через 33 минуты
Если первый вариант, то можно нарисовать внутри баннера вправо и влево какие-то элементы и сделать код публикации так (скачайте себе SWFObject 2 версии для этого, если публикуете сейчас без него):
Код:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>rubber</title>
<script type="text/javascript" src="swfobject.js"></script>
<script language="javascript">
var Flashvars = false;
var Params= { 
        menu: "false",
        allowScriptAccess: "sameDomain",
        allowFullScreen: "false",
        quality: "high",
        bgcolor: "#000000",
        wmode: "transparent",
        scale: "noscale"
};
var Attributes = {  align: "middle" }
};
swfobject.embedSWF("rubber.swf", "rubber", "100%", "100%", "9.0.0", "expressInstall.swf", Flashvars, Params, Attributes);
</script>
</head>

<body bgcolor="#cccccc">

<div style="height:200px; width:100%;">
<div id="rubber">
Здесь будет флешка.
</div>
</div>   

</body>
</html>

Допустим, баннер 200px в высоту.
Тогда задаем два блока - внешнему <div> задем 200px высоты и 100% ширины, а публикуем флешку во внутренний с id="rubber", выставляя ей 100% в обеих измерениях и режим scale: "noscale".

То есть в сухом остатке флеш тут получается не "резиновым", а "резиновой" делается область его видимости.

mooncar 26.01.2010 18:08

Вложений: 1
Вот, посмотрите на результат, что получается:
http://www.us-pro.ru/mooncar/rubber/rubber.html
Исходники приложил...


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

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