Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Расположение объектов в резиновом баннере (http://www.flasher.ru/forum/showthread.php?t=173653)

VA3 08.01.2012 13:26

Вложений: 1
Добрый день!

Я не являюсь опытным пользователем AS3, но пытаюсь самостоятельно сделать резиновый баннер. Потому заранее извиняюсь если задаю слишком простой вопрос. Но перегуглил всё. Варианта решения проблемы не нашёл.
Прошу помочь разрешить такую задачу:
имеется резиновый баннер на нём расположена общая информация и кнопки.
Как указать правому объекту расположение по правому краю баннера?
И можно ли вообще задавать объектам место положения?

Заранее благодарен за любую помощь!

Для "растяжки" баннера использовал вот этот код:

Код AS3:

import flash.display.StageAlign;
import flash.display.StageScaleMode;
 
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "BC";
 
//stage.addEventListener(Event.ACTIVATE, onRes);
stage.addEventListener(Event.RESIZE, onRes);
this.loaderInfo.addEventListener(Event.INIT, onRes);
 
 
function onRes(e:Event):void
{
 trace(e.type);
 this.loaderInfo.removeEventListener(Event.INIT, onRes);
 
}


Jewelz 08.01.2012 19:39

Код AS3:

btn.x = stage.stageWidth - btn.width

в обработчике ресайза

VA3 12.01.2012 14:56

Спасибо огромное, Jewelz !!!!

В воскресенье не дождался сразу ответа и уже не надеялся.
Хотя сразу я не въезжаю как применить данную функцию (или как правильно называется данная строка).
Но сейчас буду разбираться!!

Ещё раз спасибо большое за отзыв!!

Времени и смысла для меня изучать AS3 нету. Но ОЧЕНЬ хочется довести до ума этот баннер самостоятельно.
Или правильно сказать, - с помощью профессионалов))

Добавлено через 28 часов 44 минуты
И снова здравствуйте всем!

По результатам суточных изысканий проблему так и не разрешил.
В конечном итоге пришёл вот к этому коду:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "BC";

stage.addEventListener(Event.RESIZE, clResize);
function clResize(e:Event):void
{
cl.x = stage.stageWidth - cl.width
}

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

Прошу всех знающих указать перстнем на эту закавыку.


Заранее признателен всем откликнувшимся!

VA3 13.01.2012 19:42

Вложений: 1
Прилагаю к сообщению проблемный баннер.

PainKiller 13.01.2012 23:23

я честно говоря не понял в чем у вас проблема, в приложенном вами баннере правая кнопка "Закрыть" как приклееная двигается вместе с правым краем баннера. Или вам еще что то нужно?

VA3 13.01.2012 23:33

Да???

Вот только получив Ваше сообщение - с первым словом - прошибла мысль "а что если попробовать открыть не оперой а другим бразером"...
Немедля иду проверять!)

Добавлено через 5 минут
перепробовал всем кроме лисы...

это полтергейст или я с этим баннером растерял все крохи мозгов...

перепробовал оперу, хром, эксплорер... результат ноль..


буду сидеть думать...


спасибо Вам огромное за помощь и потраченное время!!!

по-крайней мере мне теперь точно известно что с кодом всё отлично.

Добавлено через 19 минут
Провёл следующие манипуляции:
попробовал открыть баннер на ноуте; результат - в Explorer все элементы расположились как требовалось, в Opera же результат тот же.
Исходя из этого прихожу к выводу, что используемый код
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "BC";
 
 
stage.addEventListener(Event.RESIZE, clResize);
 
function clResize(e:Event):void
{
    cl.x = stage.stageWidth - cl.width
}

является верным.
Но при этом подозреваю о возможном не соответствии определённых версий или самих браузеров к этому коду.

Если вдруг у кого-то на это есть хоть какое-то пояснение, прошу сообщить!


Ещё раз приношу свою благодарность Jewelz и PainKiller за уделённое моей проблеме время!!!

Tails 14.01.2012 01:45

У вас кнопка "закрыть" неправильно двигается ? Хотите чтобы она была всегда справа ? Тогда вы неправильно считаете координаты для неё, щас секунду ...

Добавлено через 13 минут
Вот так у вас будет справа:
Код AS3:

cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;

Почему так:
[IMG]http://s1.********************/uploads/images/2012/01/f94adb3793bc1249673d417f1e82dbcc.png[/IMG]

Добавлено через 17 минут
Версия браузера очень и очень редко когда может повлиять на работу флеша. Флеш выполняеться в своей отдельной среде, и на различия браузеров ему параллельно. Главное чтоб сам флеш плеер обновленный был.

PainKiller 14.01.2012 02:13

Вложений: 1
вот версия файла

VA3 14.01.2012 02:23

Боюсь что скоро мне нагрубят, но при всей примитивности моей проблемы я не могу разрешить.
И правда задавался вопросом как же это код раскидывает функцию. Предполагал (а с с учётом моего уровня знаний оставалось лишь предполагать), что измерение экрана происходит автоматически, и уже после этого функция размещает кнопку по правому краю.

Но оказывается всё не так просто и помимо хитрых программ надо было ещё и в школе учиться))


А теперь по сути:

Уважаемый, Tails,
после Вашего разъяснения я выполнил смену строки
Код AS3:

cl.x = stage.stageWidth - cl.width

на
Код AS3:

cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;

В результате при открытии баннера в бразере всё осталось по-прежнему.
Из своего малого опыта понял, что в случае ошибки в коде Adobe Flash Professional CS5 автоматически указывает на них при компиляции.
Сейчас же при нынешнем коде таких ошибок он не выдаёт. Что позволяет мне думать, что ошибок и нет.

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

Привожу окончательный код:
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "BC";
 
stage.addEventListener(Event.RESIZE, clResize);
function clResize(e:Event):void
{
    cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;
}


Если ещё не окончательно достал своей проблемой века прошу указать на корень зла.


Спасибо!!!

Tails 14.01.2012 02:29

Вот это:
Код AS3:

function clResize(e:Event):void
{
    cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;
}

Работает только тогда, когда окно флеш плеера растягивают мышкой, поэтому никаких изменений в начале нет. Чтобы выполнить позиционирование кнопки в начале, необходимо вынести её код и за пределы функций, например так:
Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "BC";
cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;
 
stage.addEventListener(Event.RESIZE, clResize);
function clResize(e:Event):void
{
    cl.x = (stage.stageWidth - 1024)/2+1024-cl.width;
}



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

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