![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 4
|
Привет!
Суть проблемы: Пишу баннер FLASH CS3 (AS3). Есть 2 MovieClip (символы с ссылками mc1 и mc2, каждый состоит из одной растровой картинки). 1. Вначале размещаю их один над другим. 2. Затем при наведении мыши верхних клип постепенно становиться прозрачным, отображая нижний клип. При этом флешка лупается постоянно. 3. При нажатии на баннер должно всплыть окно с определенным URL. Проблема: После высплытия нового окна по клику, возвращаюсь в окно с баннером. Но он почему-то перестал (как я подозреваю реагировать на событие MOUSE_OVER) воспроизводить анимацию при наведении мыши. Только после отработки события MOUSE_OUT все возращается на круги своя. Вот код: package
{
import flash.display.MovieClip;
import flash.events.*;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.sendToURL;
public class Banner_100x100 extends MovieClip
{
private var va:Number = 0;
private var _va:Number = 0;
private var flg:Boolean = false;
private var tm:Number = 0.01;
private var mc1:MovieClip;
private var mc2:MovieClip;
private var url:String = "http://ukr.net";
public function Banner_100x100()
{
mc1 = this["clip_bg"];
mc2 = this["clip2_bg"];
mc1.buttonMode = true;
mc1.useHandCursor = true;
mc1.x = 0;
mc1.y = 0;
mc2.x = 0;
mc2.y = 0;
Init();
AddListeners();
}
private function Init():void
{
va = 0;
_va = tm;
flg = false;
mc1.alpha = 1;
}
private function AddListeners()
{
stage.addEventListener(MouseEvent.MOUSE_UP, captureMouseUp, false);
stage.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
stage.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}
function captureMouseUp(event:MouseEvent):void
{
//stage.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
navigateToURL(new URLRequest(url));
Init();
mc1.gotoAndPlay(1);
}
private function onEnter(event:Event):void
{
if (!flg) return;
_va += _va;
va += _va;
if (va <= 1)
{
mc1.alpha -= va;
}
else
{
mc1.alpha = 0;
}
//trace("onEnter");
}
private function mouseOverHandler(event:MouseEvent):void
{
va = 0;
_va = tm;
flg = true;
//trace("mouseOverHandler");
}
private function mouseOutHandler(event:MouseEvent):void
{
Init();
}
}
}
|
|
|||||
|
Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
|
Код ужасен. Начиная от логики, заканчивая именованием переменных.
Мне, например, просто лень в таком разбираться. |
|
|||||
|
логика ужасная, это точно.
А такого я еще не видел))) Уберите со stage листенер на EneterFrame, и ставте его только тогда когда вы например наводите на клип, и удаляется когда он исчезнит. И зачем вобще писать stage???? И что за анимация должна происходить при MOUSE_OVER?
__________________
Работю в DigitalHouse |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 4
|
Пршу прощения за свой "английский"
. Код писал быстро, поэтому времени на красивости не было, подкручивал код на ходу:_va += _va; va += _va; Сам увидел и прослезился. Не вижу смысла в красивом именовании переменных в маленьком коде. stage писал потому как не очень знаком с экшн-скриптом и не совсем представляю себе иерархию объектов, увидел пример на форуме и вставил. Вначале баннер черно-белый, затем при MOUSE_OVER он начинает с ускорением набирать цвет (уменьшаю alpha клипа расположенного над ним), т.е. снизу цветная картинка, а сверху чернобелая. При MOUSE_OUT - эффект противоположный. |
|
|||||
|
Цитата:
__________________
+ |
|
|||||
|
написал по быстрому, даже не проверял, теоретически должно работать
public class Baner extends MovieClip
{
private var dx:Number;
private var status:String;
private var m1:MovieClip;
public function Baner()
{
mc1 = getChildByName("clip_bg");
addListeners();
}
private function addListeners():void
{
stage.addEventListener(MouseEvent.MOUSE_OVER, mouseEvent);
stage.addEventListener(MouseEvent.MOUSE_OUT, mouseEvent);
}
private function mouseEvent(e:MouseEvent):void
{
if (e.type == 'MOUSE_OVER')
status = 'show';
else
status = 'hide';
dx = 0;
addEventListener(Event.ENTER_FRAME, eventShow);
}
private function eventShow(e:Event):void
{
dx += 0.01;
if (status == 'hide')
{
mc1.alpha -= dx;
if (mc1.alpha < 1)
{
mc1.alpha = 0;
removeEventListener(Event.ENTER_FRAME, eventShow);
}
}
else
{
mc1.alpha += dx;
if (mc1.alpha >1)
{
mc1.alpha = 1;
removeEventListener(Event.ENTER_FRAME, eventShow);
}
}
}
}
__________________
Работю в DigitalHouse |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 4
|
Цитата:
код немного делает не ту анимацию, ну да ладно не в этом суть. В общем заказчик захотел открывать ссылку в том же окне - камень упал с души. Но, все-таки хочется разобраться в проблеме: после перехода по ссылке и всплывания нового окна флешка "замерзает". Предложенный Вами код тоже не помог.Как я понял после комманды navigateToURL всплывает новое окно, листенер на Event.ENTER_FRAME отваливается до тех пор, пока каким нибудь событием (например MouseEvent.MOUSE_OVER или MouseEvent.MOUSE_OUT) его опять не подымешь... Если более кратко: как продолжить реакцию на событие Event.ENTER_FRAME после перехода на другую страницу? |
|
|||||
|
Ну, если действительно проблема в этом (хотя у меня такой проблемы не возникало), то как костыли - попробовать отписаться от события ENTER_FRAME после перехода по ссылке и вновь потом на него подписаться. Только не думаю, что это поможет. Проблема, скорее всего, в чем-то другом.
__________________
Дело не в тебе |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 4
|
Пробовал и такое, действительно не помогает. Причем при тестировании во флеш-плеер отдельно от браузера такой проблемы нет. А как только опубликуешь в хтмл файл, уже не работает.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:25. |
|
|
« Предыдущая тема | Следующая тема » |
|
|