PDA

Просмотр полной версии : Инициировать произвольное событие


Oreanor
27.02.2007, 16:17
Можно ли во флеше сделать такую штуку:

допустим, есть обычный мувиклип (не компонент) для выбора цвета текста (как в редакторе). Он состоит из нескольких цветных квадратиков, кликнув на любой из них, меняется цвет основного квадратика, и цвет становится текущим - в мувике задается своя собств. переменная picked_color.

теперь я помещаю его на сцену и мне нужно извне отследить, произошло ли событие - изменение цвета.
т.е. задать что-то вроде обработчика onPickColor или onSelect, какой бывает у стандартных компонентов. но как инициировать такое событие, я не знаю - возможно ли?

Oreanor
27.02.2007, 16:34
копаю в сторону AsBroadcaster, по-моему это то, что нужно....

BigDan
27.02.2007, 16:36
Вот (http://flasher.ru/forum/attachment.php?attachmentid=15736&d=1163182568) пример.

Oreanor
27.02.2007, 16:40
большое спасибо, разобрался

ВАРАН
27.02.2007, 16:51
Можно старым дедовским методом:

вставляем в кадр клипа допустим mc:

my_color = new Color(this);
my_color.setRGB(0xff9933);
picked_color = my_color.getRGB().toString(16);
this.onEnterFrame = function() {
picked_color = my_color.getRGB().toString(16);
if (picked_color !== temp_color) {
trace(picked_color);
}
temp_color = my_color.getRGB().toString(16);
};

Изменяя из вне цвет этого клипа через mc.my_color.setRGB(0xff9933); мы будем получять трэйс нового цвета.

Oreanor
27.02.2007, 16:57
это, пожалуй, слишком дедовский метод )
не хотелось онэнтерфреймы и сетинтервалы для этого использовать.
так никаких ресурсов не хватит )

MOHCTEP
28.02.2007, 05:48
object.watch() спасет.

Oreanor
28.02.2007, 11:33
спасибо, это может быть даже более удобный вариант.

только я не понял в примере одну вещь - почему callback-функции нужно столько параметров (prop, oldVal, newVal, speedLimit)?? хотя реально передается только speedLimit. и то непонятно, как функция узнает, что 55 - это именно speedLimit??


// Create a new object
var myObject:Object = new Object();

// Add a property that tracks speed
myObject.speed = 0;

// Write the callback function to be executed if the speed property changes
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
// Check whether speed is above the limit
if (newVal > speedLimit) {
trace ("You are speeding.");
}
else {
trace ("You are not speeding.");
}

// Return the value of newVal.
return newVal;
}
// Use watch() to register the event handler, passing as parameters:
// - the name of the property to watch: "speed"
// - a reference to the callback function speedWatcher
// - the speedLimit of 55 as the userData parameter
myObject.watch("speed", speedWatcher, 55);

// set the speed property to 54, then to 57
myObject.speed = 54; // output: You are not speeding
myObject.speed = 57; // output: You are speeding

// unwatch the object
myObject.unwatch("speed");
myObject.speed = 54; // there should be no output

Mr. Fixit
28.02.2007, 12:17
передается, "speed" - prop, speedWatcher - function, 55 - speedLimit
oldVal & newVal - значения prop, где ---.watch(---) отслеживает изменения старого значения(предидущего) и нового(даного).

Oreanor
28.02.2007, 12:37
короче, это просто форма записи такая? - function(prop, oldVal, newVal, speedLimit)? вот эти три: prop, oldVal, newVal - надо просто всегда писать и не париться?

etc
28.02.2007, 12:39
watch — костыльки.
Используйте событийную модель и EventDispatcher или AsBroadcaster.

Oreanor
28.02.2007, 13:15
ок, всем спасибо за инфу!