Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.10.2008, 18:28
ivengo28 вне форума Посмотреть профиль Отправить личное сообщение для ivengo28 Найти все сообщения от ivengo28
  № 1  
Ответить с цитированием
ivengo28

Регистрация: Oct 2008
Сообщений: 4
По умолчанию Непонятная реакция флешки после navigateToURL

Привет!

Суть проблемы:

Пишу баннер 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();
    	        }							
	}
}

Старый 30.10.2008, 18:59
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 2  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Код ужасен. Начиная от логики, заканчивая именованием переменных.
Мне, например, просто лень в таком разбираться.

Старый 30.10.2008, 22:02
Anry_coolboy вне форума Посмотреть профиль Отправить личное сообщение для Anry_coolboy Найти все сообщения от Anry_coolboy
  № 3  
Ответить с цитированием
Anry_coolboy
 
Аватар для Anry_coolboy

Регистрация: Dec 2006
Адрес: Ukraine Lugansk
Сообщений: 188
Отправить сообщение для Anry_coolboy с помощью ICQ Отправить сообщение для Anry_coolboy с помощью Skype™
логика ужасная, это точно.
А такого я еще не видел)))
Код:
_va += _va;
va += _va;
Уберите со stage листенер на EneterFrame, и ставте его только тогда когда вы например наводите на клип, и удаляется когда он исчезнит. И зачем вобще писать stage????

И что за анимация должна происходить при MOUSE_OVER?
__________________
Работю в DigitalHouse

Старый 31.10.2008, 18:51
ivengo28 вне форума Посмотреть профиль Отправить личное сообщение для ivengo28 Найти все сообщения от ivengo28
  № 4  
Ответить с цитированием
ivengo28

Регистрация: Oct 2008
Сообщений: 4
Пршу прощения за свой "английский" . Код писал быстро, поэтому времени на красивости не было, подкручивал код на ходу:
_va += _va;
va += _va;
Сам увидел и прослезился.
Не вижу смысла в красивом именовании переменных в маленьком коде.
stage писал потому как не очень знаком с экшн-скриптом и не совсем представляю себе иерархию объектов, увидел пример на форуме и вставил.
Вначале баннер черно-белый, затем при MOUSE_OVER он начинает с ускорением набирать цвет (уменьшаю alpha клипа расположенного над ним), т.е. снизу цветная картинка, а сверху чернобелая. При MOUSE_OUT - эффект противоположный.

Старый 31.10.2008, 23:00
Kamchatka вне форума Посмотреть профиль Отправить личное сообщение для Kamchatka Найти все сообщения от Kamchatka
  № 5  
Ответить с цитированием
Kamchatka

Регистрация: May 2008
Адрес: Keytown
Сообщений: 94
Отправить сообщение для Kamchatka с помощью ICQ
Цитата:
Не вижу смысла в красивом именовании переменных в маленьком коде.
Вы весьма не правы, хехе.
__________________
+

Старый 03.11.2008, 12:12
Anry_coolboy вне форума Посмотреть профиль Отправить личное сообщение для Anry_coolboy Найти все сообщения от Anry_coolboy
  № 6  
Ответить с цитированием
Anry_coolboy
 
Аватар для Anry_coolboy

Регистрация: Dec 2006
Адрес: Ukraine Lugansk
Сообщений: 188
Отправить сообщение для Anry_coolboy с помощью ICQ Отправить сообщение для Anry_coolboy с помощью Skype™
написал по быстрому, даже не проверял, теоретически должно работать
Код:
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

Старый 05.11.2008, 15:14
ivengo28 вне форума Посмотреть профиль Отправить личное сообщение для ivengo28 Найти все сообщения от ivengo28
  № 7  
Ответить с цитированием
ivengo28

Регистрация: Oct 2008
Сообщений: 4
Цитата:
Сообщение от Anry_coolboy Посмотреть сообщение
написал по быстрому, даже не проверял, теоретически должно работать
код немного делает не ту анимацию, ну да ладно не в этом суть. В общем заказчик захотел открывать ссылку в том же окне - камень упал с души. Но, все-таки хочется разобраться в проблеме: после перехода по ссылке и всплывания нового окна флешка "замерзает". Предложенный Вами код тоже не помог.
Как я понял после комманды navigateToURL всплывает новое окно, листенер на Event.ENTER_FRAME отваливается до тех пор, пока каким нибудь событием (например MouseEvent.MOUSE_OVER или MouseEvent.MOUSE_OUT) его опять не подымешь...
Если более кратко: как продолжить реакцию на событие Event.ENTER_FRAME после перехода на другую страницу?

Старый 05.11.2008, 15:49
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 8  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Ну, если действительно проблема в этом (хотя у меня такой проблемы не возникало), то как костыли - попробовать отписаться от события ENTER_FRAME после перехода по ссылке и вновь потом на него подписаться. Только не думаю, что это поможет. Проблема, скорее всего, в чем-то другом.
__________________
Дело не в тебе

Старый 05.11.2008, 17:25
ivengo28 вне форума Посмотреть профиль Отправить личное сообщение для ivengo28 Найти все сообщения от ivengo28
  № 9  
Ответить с цитированием
ivengo28

Регистрация: Oct 2008
Сообщений: 4
Пробовал и такое, действительно не помогает. Причем при тестировании во флеш-плеер отдельно от браузера такой проблемы нет. А как только опубликуешь в хтмл файл, уже не работает.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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