PDA

Просмотр полной версии : смена фотографий по наведению и клику с запоминанием состояния по клику


elenaki
27.10.2008, 11:42
фотки гружу динамически из XML. каждая фотка - мувик. мувику прописываю кое-какие
действия по наведению, уходу, клику. все получается, кроме запоминания состояния
нажатия. например, по наведению на ч/б фотку она должна становиться цветной, по клику
на ней - цветной и запомнить это состояние, по уходу с фотки не менять ее на ч/б как если
бы она была ненажатая. я такое делала, но тогда у меня все мувики были сразу на сцене, со
своими именами. я ввела переменную clicked и меняла ее значение по клику. а при обращении
к мувику проверяла, если его clicked=true, то не надо менять на ч/б. а вот с динамическими
мувиками так не получается. может, я неправильно их подгружаю? причем, если мышь уходит
с фотки на пустое место, то она остается цветной (если на нее нажали предварительно), а
если на другую фотку - то становится ч/б. а хотелось бы, чтоб нажатая фотка всегда была
цветной до тех пор, пока не нажали на другую. . в аттаче - .fla, .xml и 4 фотки. спасибо.

Infectedcell
27.10.2008, 15:55
Самый простой вариант:
присвойте кнопке/клипу нужный вам параметр и проверяйте его при нажатии. например

var but:MovieClip = this.createEmptyMovieClip('lol',1)
but.status = false;
but.onRelease = function() {
if (this.status!=false){
this.status=false;
// do something
}else{
this.status=true;
// do something
}
}


ну и дальше, по потребностям.

Wolsh
27.10.2008, 17:34
Ну на скорую руку вот так получилось. Может быть зря я enabled использовал, и надпись после нажатия наверно должна оставаться... Говорите, что-нибудь придумаем)

elenaki
27.10.2008, 20:52
присвойте кнопке/клипу нужный вам параметр и проверяйте его при нажатии. например

я так и делала. но при заходе на следующую фотку эти переменные становились снова false. мне кажется, при загрузке новой фотки, теряется старый мувик...

вариант Wolsh посмотрю позже. отвечу.

scarbo
27.10.2008, 22:20
Wolsh ,а зачем делать две копии фотки - одну ч/б,а другую в цвете,не проше ли ColorMatrix?

skald
27.10.2008, 22:33
2scarbo это не Wolsh начал с картинками ... это у elenaki было ...
да к томуже там одним ColorMatrixом не обойдешься ... там явно еще яркость добавлена ... )))
хотя кодом решить эту проблему полюбому проще, да к томуже при смене картинок не надо будет париться ))))

Wolsh
27.10.2008, 23:58
scarbo - Господа хорошие, пожалейте девушку. Дайте человеку с азами разобраться, я тоже сначала рванул фильтры импортировать)) потом смотрю в свойствах проекта вообще ActionScript 1.0 стоит))) Как при этом ещё и с XML что-то получалось - загадка для меня.
skald - а кто парится? )))))
По сравнению с загрузкой новой картинки каждый раз при наведении-уводе с неё мыши... Давайте пока забудем про фильтры. Мы можем сейчас сделать проект за elenaki, и в следующий раз она сделает те же ошибки. В чем же тогда помощь?

elenaki
28.10.2008, 14:02
всем спасибо. ваирант Wolsh'a меня вполне устраивает, хотя я много в нем не понимаю. хотелось бы, чтоб надпись нажатой фотки оставалась. сейчас она пропадает. с XML работает все и в AS 1.0. тем более, что у меня не чистый XML, а построение его из PHP, но это не важно. с Флашем я не так часто работаю.

помогите, пожалуйста, сделать, чтобы надпись не пропадала после ухода. по наведению на другую фотку должна появиться ее надпись и фотка должна стать цветной. но если по ней НЕ кликнули, а ушли, то она опять становится ч/б, ее надпись пропадает, а остается надпись нажатой фотки, которая в этот момент цветная. я плохо объясняю, наверно. по клику там еще кое-какие действия происходят, вне Флаша. поэтому важно, чтобы кликнутая фотка была цветная и была видна ее надпись.

Wolsh
28.10.2008, 14:25
Замените скрипт этих двух обработчиков на новый:
thumbHolder.onRollOut = function() {
title_txt.text = _root.pressed.title;
this.grey_image.onEnterFrame = function() {
if ((this._alpha += 10)>=100) {
delete this.onEnterFrame;
}
};
};
// Устанавливаем обработчик событий нажатия на кнопку
thumbHolder.onPress = function() {
_root.pressed.enabled = true;
_root.pressed.onRollOut();
title_txt.text = this.title;
this.enabled = false;
_root.pressed = this;
getURL("javascript: changePhoto("+cat+","+(this.count+1)+",1,"+this.kol+")", "_self");
};
А что Вам объяснить, спрашивайте не стесняйтесь)

elenaki
28.10.2008, 16:40
спасибо! все работает как надо!

а непонятны мне эти enabled и вызов функции _root.pressed.onRollOut(); внутри функции thumbHolder.onPress ... запутывает.

Wolsh
28.10.2008, 17:43
enabled - cвойство мувиклипа или кнопки. Если true - клип слушает кнопочные события (ролловер и тп), если false - он никак на мышь не реагирует.
в _root.pressed сохраняется ссылка на последний нажатый клип. Т.е. каждый клип при нажатии на него сначала выполняет разные действия, в том числе "освобождает" предыдущий нажатый, а потом записывает себя в эту переменную. Таким образом мы всегда знаем, какая кнопка сейчас в нажатом состоянии, нам не надо просматривать их все и считывать какойто флаг типа "да, это я нажатая")))

elenaki
28.10.2008, 18:29
а. понятно. спасибо еще раз. :)

PS там был небольшой баг. если ни одна фотка не нажата, то по наведению как и надо появлялось ее название,
а по уходу на пустое место возникала надпись "undefined". но с этим я справилась.