![]() |
|
||||||||||
|
|||||
|
Dimax4d, честно говоря немного не догоняю. Предлагаю абстрактный пример: при изменении значения некоторой переменной вне функции, изменяющей соответствующую переменную, вызвать другую функцию
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");//эта функция должна запускаться при изменении значения переменной } } }
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
|
С классом Number пример неудачный. Он определен как final, то есть от него нельзя наследоваться, да и смысла в этом нет. А по сути - почитайте что такое методы get и set для начала, и про систему событий. Тогда мой пример станет вам понятен
Добавлено через 4 минуты 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. |
|
|||||
|
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 задает.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Регистрация: Jul 2009
Адрес: Москва
Сообщений: 99
|
Type not found потому что вам надо в ту же папку поместить файл из предыдущего моего примера, тогда скомпилится.
Цитата:
Последний раз редактировалось Dimax4d; 04.08.2009 в 01:49. |
|
|||||
|
Класс с твоей переменной:
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); } // ========================================================== // } } 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; } // ========================================================== // } } 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|