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

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

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

Регистрация: Aug 2007
Сообщений: 9
По умолчанию передача значений в обработчике событий

Как можно передать значение переменной в функцию ClickHandler() при
addEventListener(MouseEvent.CLICK,ClickHandler);
или альтернативный вариант решения ?

Старый 10.08.2007, 19:35
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 2  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
ClickHandler как аргумент получит событие которое его вызвало, следовательно можно сделать класс, расширяющий базовое событие, использовать его вместо MouseEvent.CLICK, добавить в него публичных переменных и получать их значения в ClickHandler

Альтернатива - можно например сделать статический класс и использовать его как хранилище статических переменных, они так-же будут доступны в ClickHandler


Последний раз редактировалось Онтожка; 10.08.2007 в 19:38.
Старый 10.08.2007, 19:43
alexej81 вне форума Посмотреть профиль Отправить личное сообщение для alexej81 Найти все сообщения от alexej81
  № 3  
Ответить с цитированием
alexej81

Регистрация: Aug 2007
Сообщений: 9
а можно пример класса, расширяющего базовое событие
и пример статического класса ?

Старый 10.08.2007, 20:57
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 4  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
вот класс расширяющий событие MouseEvent:

Код:
package {
	import flash.events.*;
	public class CustomMouseEvent extends MouseEvent{
		
		public static var CLICKED_ONCE:String = "clickedOnce";
		
		public var anything:*;
		
		public function CustomMouseEvent(type:String,anything:*=null){
			super(type);
			this.anything=anything;
		}
	}
}

Вот класс для мувиклипа MenuButton в библиотеке, при нажатии на мувиклип будет трейсить текущую дату, которая берётся из CustomMouseEvent:

Код:
package {
	import flash.display.MovieClip;
	import flash.events.*;

	public class  MenuButton extends MovieClip{
				
		public function MenuButton(){
			addEventListener(MouseEvent.CLICK,onClick);
			addEventListener(CustomMouseEvent.CLICKED_ONCE, ClickHandler)
		}
		
		private function onClick(evt:MouseEvent):void{
			dispatchEvent(new CustomMouseEvent(CustomMouseEvent.CLICKED_ONCE, new Date()))
		}
		
		private function ClickHandler(evt:CustomMouseEvent):void{
			trace(evt.anything)
		}
	}
}


Вот вариант со статической переменной в классе (сам класс статическим быть не может, я немного напутал, сам новичёк в этом можно сказать )

Код:
package {
	public class Stat {
		public static var anything:* = 1;
	}
}
и в этом случае класс мувиклипа выглядит так:

Код:
package {
	import flash.display.MovieClip;
	import flash.events.*;

	public class  MenuButton extends MovieClip{
				
		public function MenuButton(){
			addEventListener(MouseEvent.CLICK, ClickHandler)
		}
		
		private function ClickHandler(evt:MouseEvent):void{
			trace(Stat.anything)
		}
	}
}

Старый 11.08.2007, 22:04
alexej81 вне форума Посмотреть профиль Отправить личное сообщение для alexej81 Найти все сообщения от alexej81
  № 5  
Ответить с цитированием
alexej81

Регистрация: Aug 2007
Сообщений: 9
Для первого случая : а если необходимо передать значение аргумента функции ClickHandler внутри функции MenuButton() ?


Последний раз редактировалось alexej81; 11.08.2007 в 23:15.
Старый 12.08.2007, 00:04
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
нет логики: передавать аргумент в addEventListener (самому себе, заметь), чтобы добавить его в событие и передать потом в ClickHandler.., не проще сразу определить нужное свойство, а в ClickHandler им воспользоваться..

Старый 12.08.2007, 00:12
alexej81 вне форума Посмотреть профиль Отправить личное сообщение для alexej81 Найти все сообщения от alexej81
  № 7  
Ответить с цитированием
alexej81

Регистрация: Aug 2007
Сообщений: 9
а если это свойство меняется динамически, в функции MenuButton ?

Старый 12.08.2007, 00:21
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не очень понимаю что и как ты собрался динамически менять в конструкторе..
впрочем, почему нельзя менять нужное свойство.., короче, непонятно чего добиваемся..

Старый 12.08.2007, 00:26
alexej81 вне форума Посмотреть профиль Отправить личное сообщение для alexej81 Найти все сообщения от alexej81
  № 9  
Ответить с цитированием
alexej81

Регистрация: Aug 2007
Сообщений: 9
меняется, не в самом конструкторе, а в одном из его методов
а пример смены свойства в ClickHandler в зависимости от динамического значения внутри MenuButton ?

Старый 12.08.2007, 00:33
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
package {
	import flash.display.MovieClip;
	import flash.events.*;

	public class  MenuButton extends MovieClip{
		private var someProp:String;		
		public function MenuButton(){
			addEventListener(MouseEvent.CLICK,onClick);
			someProp="someVal";
			
		}
		
		private function onClick(evt:MouseEvent):void{
			trace( "someProp : " + someProp );
		}
	}
}

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

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

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


 


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


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