PDA

Просмотр полной версии : Отклик мувиков нужного типа на к-либо действие.


ChickenKid
14.12.2005, 21:28
Я создаю несколько однотипных мувиков, в которых прописана какая-нибудь функция (например, изменяющая текст в текстфилде внутри этого мувика). Есть глобальная переменная, допустим, _root.v. Нужно, чтобы при изменении значения этой переменной на какое-нибудь другое, во всех мувиках сробатывали те прописанные функции.

Или можно создать класс, которому присвоить эти мувики, и вызывать где-нибудь метод этого класса (например, с новым значением _root.v в качестве параметра), который вызовет прописанную внутри него фунцию для каждого экземпляра (моих несчастных мувиков)? Как такое сотворить?

Практическое применение может быть следующим:
— сайт выполнен в какой-то цветовой гамме, т. е. элементы сайта одного и того же цвета (кнопки, текст, курсор и т. д.), и ондим нажатием мыши поменять цветю гамму сайта, т. е. одновременно цвета всех нужных элементов;
— если сайт на нескольких языках, поменять текст во всех нужных мувиках на соответствующий язык.

KUZEN
14.12.2005, 22:00
Есть глобальная переменная, допустим, _root.v.

Рассмешил :D

ChickenKid
14.12.2005, 22:02
Простите-простите, в рамках моего, скажем так, проекта, такая переменная — глобальная. Ну пусть _global.v

Nirth
14.12.2005, 22:12
Начал писать когда то, чуть дописал.

import mx.events.EventDispatcher;
class ru.flasher.helping.managers.MovieClipChanger {
//event stuff
private static var initDispatcher = EventDispatcher.initialize(MovieClipChanger.prototype);
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
//private properties
private var __movies_array:Array;
private var __method:Function = null;
//Constructor
public function MovieClipChanger () {
__movies_array = new Array ();
}
//public methods
public function addMovie(mc:MovieClip):Number {
__movies_array.push(mc);
dispatchEvent({type:"add",mc:mc});
return __movies_array.length;
}
public function removeMovie(mc):Object {
var result:Object = null;
if(typeof(mc) == "number") {
result = __movies_array[mc];
__movies_array.splice(mc,1);
}else if(typeof(mc) == "movieclip") {
for(var i:Number=0;i<__movies_array.length;i++) {
if(__movies_array[i] == mc) {
result = __movies_array[i];
__movies_array.splice(i,1);
break;
}
}
}
dispatchEvent({type:"remove",mc:result});
return result;
}
public function getMovie(index:Number):MovieClip {
if(index<=__movies_array.length) {
return __movies_array[index];
}else{
return null;
}
}
public function registerMethod(method:Function):Void {
__method = method;
dispatchEvent({type:"register" , method:__method});
}
public function execute(args:Array):Void {
dispatchEvent({type:"execute",method:__method};
for(var i:Number = 0;i<__movies_array.length;i++) {
__method.apply(__movies_array[i],args);
}
}
//read only
public function get length ():Number {
return __movies_array.length;
}
public function get movies ():Array {
return __movies_array.slice()
}
}

В Фла файле на сцену кладем мувики (назевем их b1_mc, b2_mc и так далее)
и в первом кадре пишем

import ru.flasher.helping.managers.MovieClipChanger
var manager:MovieClipChanger = new MovieClipChanger();
manager.addMovie(b1_mc);
manager.addMovie(b2_mc);
manager.addMovie(b3_mc);
manager.removeMovie(b2_mc);
function setText(name:String):Void {
this._txt.text = this._name;
}
manager.registerMethod(setText);
manager.execute();

ChickenKid
15.12.2005, 15:20
Спасибо огромное!

ChickenKid
05.10.2006, 14:38
Nirth, скажи, а зачем ты в этом классе использовал EventDispatcher и его метод dispatchEvent? По сути они бесполезны, по крайней мере после того, как я их убрал, класс сохранил свою работоспособность.

Просто я хочу сделать так, чтобы в одном экземпляре MovieClipChanger можно было регистрировать несколько методов.

etc
05.10.2006, 15:32
По сути они бесполезны
Ещё как полезны, для подписки на события.
Хотя, похоже на аналог mx.data.binding.Binding…

ChickenKid
05.10.2006, 16:45
Я имел в виду именно этот пример, в нем использование EventDispatcher мне не понятно

etc
05.10.2006, 18:31
Я имел в виду именно этот пример, в нем использование EventDispatcher мне не понятно
В данном примере может и не нужно. А вообще — полезно.