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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.02.2011, 23:48
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 1  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
По умолчанию Не диспачится событие

Пока окончательно события понять не могу. Как я понял, они диспачатся и передаются вверх. Я создаю класс Region и в нем диспатчу событие. Во CS3 создаю различные фигурки и делаю им расширение классом Region. Мне нужно, чтобы в основном классе вызвалось продиспатченное событие в классе Region.
Код AS3:
package  
{
	import flash.display.*;
	import flash.events.*;
	import fl.motion.Color;
 
	public class Region extends MovieClip 
	{
 
		public static const CLICK_REG1:String = "clickreg1";
 
		public function Region():void 
		{
			this.addEventListener(MouseEvent.CLICK, onClick)
		}
 
		private function onClick(e:MouseEvent):void 
		{
			e.target.alpha = 0.5;
			dispatchEvent(new Event(Region.CLICK_REG1))
		}	
 
	}
 
}
 
package  
{
	import flash.display.*;
	import flash.events.*;
	import fl.motion.Color;
 
	public class Shar extends Region
	{
 
		public function Shar():void 
		{
 
		}
 
	}
}
 
package  
{
 
	/**
	 * ...
	 * @author Stas
	 */
	public class Main extends Sprite
	{
 
		public function Main():void 
		{
			Всякий код...
 
 
			Потом, чтобы вызвать событие, продиспатченное в Region, создаю экземпляр его класса
			var reg:Region = new Region();
			reg.addEventListener(Region.CLICK_REG1, onClick);
 
			Но событие не срабатывает.
 
		}
 
		private function onClick(e:Event):void 
		{
			trace("SOS")
		}
	}
 
}
Объясните пожалуйста, почему событие не срабатывает?

Старый 24.02.2011, 00:06
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Вы путаете отношения наследования с деревом дисплей-листа.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 24.02.2011, 00:15
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 3  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
А объяснить сможете, пожалуйста. Как работает событие и в чем тут ошибка?

Добавлено через 27 минут
Как мне в таком случае вызвать событие, продиспатченное в Region?

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
У Вас событие наверх диспатчится по клику мыша. Нет события клика мыша внутри региона.

Старый 24.02.2011, 01:19
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 5  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Почему это нет события? Вот событие клика внутри Региона
Код AS3:
public function Region():void 
		{
			this.addEventListener(MouseEvent.CLICK, onClick)
		}
 
		private function onClick(e:MouseEvent):void 
		{
			e.target.alpha = 0.5;
			dispatchEvent(new Event(Region.CLICK_REG1))
		}

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
поставьте трейс сразу после e.target.alpha = 0.5;
обработчик события есть, просто оно не возникает

Вот рабочий код, если не ждать события MouseEvent.CLICK:

Код AS3:
package  
{
	import flash.display.*;
	import flash.events.*;
 
	public class Region extends MovieClip 
	{
 
		public static const CLICK_REG1:String = "clickreg1";
 
		public function Region():void 
		{
		}
 
		public function testEvent():void 
		{
			dispatchEvent(new Event(Region.CLICK_REG1))
		}	
 
	}
 
}
 
 
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			var reg:Region = new Region();
			reg.addEventListener(Region.CLICK_REG1, onClick);
			reg.testEvent();
		}
 
		private function onClick(e:Event):void 
		{
			trace("SOS")
		}
 
	}
 
}

Старый 24.02.2011, 01:51
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 7  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Цитата:
Сообщение от mikhailk Посмотреть сообщение
поставьте трейс сразу после e.target.alpha = 0.5;
обработчик события есть, просто оно не возникает
Мне надо, чтобы событие диспетчеризировалось в Регионе и шло в главный класс. В главном классе при возникновении события будут происходить определенные действия. ИМЕННО В ГЛАВНОМ КЛАССЕ, а не в самом Регионе.
Цитата:
Вот рабочий код, если не ждать события MouseEvent.CLICK:
Этот код-событие срабатывает сразу при добавлении на сцену главного класса. Мне же надо другое.

Ты меня немного не так понял, наверное. Как работает событие я знаю, но вот с пользовательскими событиями - еще путаюсь.

Так как грамотно организовать код?

Старый 24.02.2011, 15:09
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Если поставить трейс внутрь Region.onclick(), станет очевидно, что Region.onclick() не отрабатывает. Будет отрабатывать, будет и событие диспатчиться.

Старый 26.02.2011, 17:56
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 9  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Честно говоря, я так и не понял, о чем вы. Мне нужно вызвать событие в главном классе, продиспатченное в Регионе. Как это сделать? Вот вопрос!

Уважаемый форумчане, кто может ответить на данный вопрос?

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
mikhailk, я так и не понял почему не должен сработать онКлик в риджионе, если он наследник мувика и есть некая кликабельная область (если есть конечно).
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

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

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


 


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


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