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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.02.2011, 19:10
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 11  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
все очень просто.

у автора стоит абсолютно рабочий код dispatchEvent(new Event(Region.CLICK_REG1)), который почему-то не работает.

что делает разумный человек?
наверное, он проверяет, а приходит ли управление в это место кода - в данном случае, отрабатывает ли метод onClick в классе Region.

как он это делает?
например, он ставит трейс перед фрагментом кода, который не отрабатывает (что я, собственно, и предложил автору)

почему я считаю, что код рабочий?
потому что я взял код автора, переименовал метод с неработающим dispatchEvent(new Event(Region.CLICK_REG1)), вызвал его напрямую и все отработало (см. приведенный фрагмент кода)


Последний раз редактировалось mikhailk; 26.02.2011 в 19:13.
Старый 26.02.2011, 19:41
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 12  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Метод onclick в Регионе срабатывает. В этом проблем нет. Но не вызывается в главном классе.

Я еще раз все переписал и откомпилил.


Последний раз редактировалось DZHETIGAPA; 26.02.2011 в 19:48.
Старый 26.02.2011, 20:12
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 13  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Код AS3:
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);
			addChild(reg);
		}
 
		private function onClick(e:Event):void 
		{
			trace("SOS")
		}
 
	}
 
}
 
package  
{
	import flash.display.*;
	import flash.events.*;
 
	public class Region extends MovieClip 
	{
 
		public static const CLICK_REG1:String = "clickreg1";
 
		public function Region():void 
		{
			this.graphics.beginFill(0xff0000);
			this.graphics.drawRect(100, 100, 200, 200);
			this.graphics.endFill();
 
			this.addEventListener(MouseEvent.CLICK, onClick);
		}
 
		public function onClick(e:MouseEvent):void 
		{
			trace("onClick");
			dispatchEvent(new Event(Region.CLICK_REG1))
		}	
 
	}
 
}

Старый 27.02.2011, 01:03
Johny_86 вне форума Посмотреть профиль Отправить личное сообщение для Johny_86 Найти все сообщения от Johny_86
  № 14  
Ответить с цитированием
Johny_86

Регистрация: Feb 2011
Сообщений: 11
Тут проблема в следующем. У тебя главный класс создает экземпляр класса Region. В главном классе ты вешаешь обработчик события. Но ты ведь на сцену не добавляешь Region объект. А в Region ты написал, что как только ПО НЕМУ кликнуть, то диспатчится событие. А как же ты по нему кликнешь, если его нету на сцене? ))) раз его нету на сцене, то кликнуть по нему ты не можешь и поэтому продиспатчить событие ты тоже не можешь. Тебе надо либо добавлять его на сцену в главном классе. Либо диспатчить не по клику, а в конструкторе, например.

Старый 27.02.2011, 16:15
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 15  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если диспатчить в конструкторе, то никогда не получится подписаться на событие до его диспетчеризации.
В конструкторе диспатчить события нельзя!
__________________
Отряд Котовскага

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
можно
если слушать не на объекте, а на его родителе и баблинг поставить

но не нужно

Старый 27.02.2011, 16:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 17  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Даже если слушатель на родителе - родитель возникает в момент addChild, что позже конструктора полюбому)
__________________
Отряд Котовскага

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
да, действительно ))

Нет, все-таки можно.
Надо событие отправить на статическую переменную Main.instance (как пример) и ее же слушать.


Последний раз редактировалось mikhailk; 27.02.2011 в 16:39.
Старый 27.02.2011, 20:30
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 19  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Давайте закончим с бредом.
Цитата:
Надо событие отправить на статическую переменную Main.instance (как пример) и ее же слушать.
Я даже понял, что вы имели в виду, но это совсем не в тему.
правило:
В конструкторе диспатчить события нельзя!
__________________
Отряд Котовскага

Старый 28.02.2011, 01:07
Johny_86 вне форума Посмотреть профиль Отправить личное сообщение для Johny_86 Найти все сообщения от Johny_86
  № 20  
Ответить с цитированием
Johny_86

Регистрация: Feb 2011
Сообщений: 11
Цитата:
Сообщение от Котяра Посмотреть сообщение
Если диспатчить в конструкторе, то никогда не получится подписаться на событие до его диспетчеризации.
В конструкторе диспатчить события нельзя!
Cогласен. Не получится. Только если ставить таймер на диспатч, но это все бред ))) Мы говорили почему у него оно не диспатчится. А не диспатчится потому, что кликать не по чему, чтобы задиспатчить.

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

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

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


 


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


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