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

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

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Dimax4d, честно говоря немного не догоняю. Предлагаю абстрактный пример: при изменении значения некоторой переменной вне функции, изменяющей соответствующую переменную, вызвать другую функцию
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	public class Test extends Sprite {
		var t:Number=5;
		var rect:Sprite = new Sprite();
		public function Test():void {
			rect.graphics.beginFill(0xff0000);
			rect.graphics.drawRect(10,10,50,30);
			addChild(rect);
			rect.addEventListener(MouseEvent.CLICK, onMouse);
		}
		function onMouse(e:MouseEvent):void {//некоторое событие, изменяющее значение переменной, сложность в том, что в этой функции не должно быть никаких указаний на функцию tt();
			trace("click "+t);
			t=12;
			trace("click "+t);
		}
		function tt():void {
			trace("Change parameter");//эта функция должна запускаться при изменении значения переменной
		}
	}
}
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
С классом Number пример неудачный. Он определен как final, то есть от него нельзя наследоваться, да и смысла в этом нет. А по сути - почитайте что такое методы get и set для начала, и про систему событий. Тогда мой пример станет вам понятен

Добавлено через 4 минуты
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite
	{
		private var sprite:MySprite = new MySprite();
 
		public function Main()
		{
			super();	
 
			sprite.addEventListener(Event.RESIZE, this.resizeHandler);
			sprite.width = 300; // в этом месте происходит диспетчеризация события Event.RESIZE, как описано в классе MySprite
 
		}
 
		private function resizeHandler(event:Event):void {
			trace ("Resize");
		}
	}
}


Последний раз редактировалось Dimax4d; 04.08.2009 в 00:09.
Старый 04.08.2009, 01:06
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 13  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
1046: Type was not found or was not a compile-time constant: MySprite.
1180: Call to a possibly undefined method MySprite.
1180: Call to a possibly undefined method MySprite.
Почитал. Как я понял - это обычные свойства того или иного объекта. Читал Мука, там не нашел что б при изменении того или иного значения вызывалась какая-либо функция. get просто получает значение, set задает.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
Type not found потому что вам надо в ту же папку поместить файл из предыдущего моего примера, тогда скомпилится.

Цитата:
Читал Мука, там не нашел что б при изменении того или иного значения вызывалась какая-либо функция. get просто получает значение, set задает.
По сути да, но в get и set вы можете добавить свои инструкции если захотите. Прмер, показывающий, что это работает - прикреплен.
Вложения
Тип файла: zip src.zip (827 байт, 40 просмотров)


Последний раз редактировалось Dimax4d; 04.08.2009 в 01:49.
Старый 04.08.2009, 02:08
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 15  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Класс с твоей переменной:
Код AS3:
package gerich.propertyevent.example
{	
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
	//Класс содержащий отслеживаемую переменную
	public class VariableWatcher implements IEventDispatcher
	{
		private var _variable:SomeType=DEFAULT_VALUE;
		private var eventDispatcher:EventDispatcher;
		// ========================================================== //
		public function VariableWatcher():void
		{
			eventDispatcher = new EventDispatcher(this);
		}
		// ========================================================== //
		//Получить значение переменной
		public function get variable():SomeType
		{
			return _variable;
		}
		// ========================================================== //
		//Изменить значение переменной, при этом оповестить, кто подписался
		public function set variable(_variable:SomeType):void
		{
			eventDispatcher.dispatchEvent(new VariableWatcherEvent(VariableWatcherEvent.CHANGED,this,_variable));
			this._variable=_variable;
		}
		// ========================================================== //
		//Дальше реализация интерфейса IEventDispatcher
		// ========================================================== //
		public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
		{
			eventDispatcher.addEventListener.apply(null, arguments);
		}
		// ========================================================== //
		public function dispatchEvent(event:Event):Boolean
		{
			return eventDispatcher.dispatchEvent.apply(null, arguments);
		}
		// ========================================================== //
		public function hasEventListener(type:String):Boolean
		{
			return eventDispatcher.hasEventListener.apply(null, arguments);
		}
		// ========================================================== //
		public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
		{
			eventDispatcher.removeEventListener.apply(null, arguments);
		}
		// ========================================================== //
		public function willTrigger(type:String):Boolean
		{
			return eventDispatcher.willTrigger.apply(null, arguments);
		}
		// ========================================================== //
	}
}
Класс события:

Код AS3:
package gerich.propertyevent.example
{
	import flash.events.Event;
	//Событие изменения переменной
	public class VariableWatcherEvent extends Event
	{
		public static const CHANGED:String = "changed";		//Переменная изменена
		private var _watcher:VariableWatcher;
		private var _newValue:SomeType;						//Новое значение переменной
		// ========================================================== //
		public function VariableWatcherEvent(type:String,_watcher:VariableWatcher,newValue:SomeType):void
		{
			_watcher=watcher;
			_newValue=newValue;
		} 
		// ========================================================== //
		public override function toString():String
		{ 
			return formatToString("VariableWatcherEvent");
		}
		// ========================================================== //
		public function get newValue():SomeType
		{ 
			return _newValue;
		}
		// ========================================================== //
		public function get oldValue():SomeType
		{ 
			return _watcher.variable;
		}
		// ========================================================== //
		public function get watcher():VariableWatcher
		{ 
			return _watcher;
		}
		// ========================================================== //
	}
}
Пример использования:

Код AS3:
package gerich.propertyevent.example
{
	//Пример
	public class VariableWatcherExample
	{
		// ========================================================== //
		public function variableWatcherListener(event:VariableWatcherEvent):void
		{
			trace("Variable changed")
			trace("-oldValue:",event.oldValue);
			trace("-newValue:",event.newValue);
		} 
		// ========================================================== //
		public function test():void
		{ 
			var vw:VariableWatcher=new VariableWatcher();
			vw.addEventListener(VariableWatcherEvent.CHANGED,variableWatcherListener);
			vw.variable=SOME_VALUE;
		}
		// ========================================================== //
	}
}

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

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

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


 


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


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