Просмотр полной версии : as2 Listeneres
Mnilionic
15.10.2006, 03:10
мне нужно написать обработчик, который бы отслеживал любые изменения в наборе переменных.
я знаю два варианта:
1. запускать функцию проверки на событие онЭнтерФрейм
2. сделать лисенер
на сколько я понял учебник, лисенеры привязываются к стандартным событиям (в моём случае онЭнтерФрейм).
Отсюда мой вопрос:
в чём, собственно разница, между тем, запускать функцию первым методом или вторым - всё равно всё происходит по одному событию, и ресурсов расходуется столько же... или не столько же?
1. использовать ООП модель, геттеры и сеттеры (function get prop и т.п.) - они как раз для этого и предназначены. Ведь изменяя свойство width , ты вызываешь кучу функций внутри нескольких клипов.
2. Поюзай Object.watch , это для АС 1 кодеров тоже подходит. Стандартный вариант.
Можно ещё вспомнить setProperty и getProperty, для реализации геттеров/сеттеров на AS1…
Mnilionic
16.10.2006, 02:02
сделал вот такую вещь:
class VarPlace {
var a:Number;
function VarPlace(aa:Number) {
a = aa;
}
function set A(aa:Number):Void {
a = aa;
//update(); как мне отсюда запустить функцию с монтажной линейки проэкта?
}
function get A():Number {
return a;
}
}
в проекте:
function update() {
trace("update");
}
var myVars:VarPlace = new VarPlace(100);
фугкция при установки переменной явно не запускается.
Как её запустить?
Mnilionic
16.10.2006, 02:11
miramax, можно этот момент подоробне:
"Ведь изменяя свойство width , ты вызываешь кучу функций внутри нескольких клипов."
Некоторые переменные из моего "комплекта" как раз свойства МувиКлипа
как мне отсюда запустить функцию с монтажной линейки проэкта?
Как и из любого другого места... _root.update();
Mnilionic
16.10.2006, 03:48
wvxvw, Вы пробовали?
Mnilionic, ты же не вызвал сеттер!
public function set A(aa:Number):Void {
a = aa;
_root.update();
}
function update() {
trace("update");
}
var myVars:VarPlace = new VarPlace(100);
myVars.A = 10;
Mnilionic
16.10.2006, 06:32
извините.. перепутал имена свойств с именами переменных для их хранение.
это освоил.
на сцене есть клип mc_ball и нужно,
чтоб вся вышенаписанная констукция работала с ним.
То есть переписать пару сеттеров этого клипа
(_x и _y добавив вызов функции update(); )
и добавить пару новых свойств.
Можно это сделать с экземпляров, у которого я знаю имя?
Переписать _x и _y нельзя.
Нужно создать свои сеттеры x и y и навесить вышеописанный класса на ball_mc.
Mnilionic
16.10.2006, 20:09
создать свои сеттеры это:
function set _x(){}
function set _y(){}
А как "навесить" класс с сохранением остальных свойств mc_ball?
создать свои сеттеры это:
function set _x(){}
function set _y(){}
А как "навесить" класс с сохранением остальных свойств mc_ball?
_x и _y — свойства мувиклипа. Их нельзя замещать своими.
Меняйте x и y вместо _x и _y при работе.
Навесить — в параметрах Linkage.
Mnilionic
16.10.2006, 21:19
параметры Linkage нет возвожности менять, т.к. библиотека пользоваьельская. А все мои операции производятся в компоненте, один из параметров которого, является имя экземпляра клипа.
Когда пользыватель будет менять координаты своего клипа, он явно будет использовать <свой_клип>._x - именно эту вещь и я хотел перехватить.
Как сделать регистерКласс для сценартного образца я знаю.
А вот можно ли это проделать, непосредственно, с клипом на монтажной линейке?
Ну тогда используйте watch.
Mnilionic
16.10.2006, 22:55
что-то не работает
function checkMc(prop, oldValu, newValu) {
trace ("check");
}
mc.watch("_x", checkMc);
mc._x = 200
В книжке нашёл:
В большинстве своем, предопределенные ActionScript свойства,
подобно _x, _y, _width и _height являются getter/setter свойствами
и не могут отслеживаться при помощи Object.watch().
создай в классе свою функцию, которая бы изменяла переменные в твоем классе, вызывая ее и передавая ей нужный параметр получится так, что ты переопределишь внутреннее свойсво, вот простой пример:
calss FakeMovieClip extends MovieClip{
var mc:MovieClip;
function FakeMovieClip(){
this.mc = _root.attachMovie(...);
}
public function fakePosition(X:Number){
mc._x = X;
}
}
создание элемента класса и вызов метода этого класса:
var fmc:FakeMovieKlip = new FakeMovieClip();
fmc.fakePosition(123);
_x и _y — свойства мувиклипа. Их нельзя замещать своими.
Меняйте x и y вместо _x и _y при работе.
Навесить — в параметрах Linkage.
Хочешь сказать что вот эта конструкция не заработает?
override public function set _x(val:Number):void
{
super.x = val;
trace(val)
}
miramax, речь идёт об AS2/AS1, где _x и _y являются координатами мувиклипа. Причём тут AS3?
Mnilionic, ну, в таком случае остаётся ставить проверку onEnterFrame или setInterval…
Mnilionic
17.10.2006, 01:14
__etc, понятно.
Сделаю тогда дополнительный _xblock и _yblock и добавлю их в параметры компнента.
Спасибо большое
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.