|
|
|||||
Как повлиять на все клипы сразу?
Здравствуйте.
Есть ряд загруженных картинок одинаковых размеров, помещенных в клипы. Для каждого клипа по окончанию загрузки выполняется код: mclListener.onLoadInit = function(target_mc:MovieClip) { var w:Number = target_mc._width; var h:Number = target_mc._height; target_mc.onEnterFrame = function() { if (this._x < -w){ this._x = num_img*w; //перемещаем клип в конец очереди } this._x -= 2; //скроллим мувики влево this.onRollOver = function() { // По событию, все мувики должны остановиться. }; }; }; Иными словами, нужно по событию остановить скролл для всех клипов. Пробовал двигать родительский клип, и отлавливать событие для него - тогда получается, но как быть с "зацикливанием" бегущей строки? Как в таком случае узнать координаты _root.mc.image1 относительно корня а не родителя?
__________________
О добром, разумном, вечном... |
|
|||||
Модрон-ветеринар
|
По какому событию все мувики должны остановится? По RollOver'у одного из них?
Что значит _x = _x? Все должны встать в точку с одной и той же координатой _x ? Какая бегущая строка? Какой такой _root.mc.image1? Не очень понятно, что к чему и что вам нужно. Начали описывать все хорошо, а потом все запутали. Выделите и сформулируйте один вопрос, но с толком. Может быть, вот так? var movieClips:Array = new Array(); var allowMove:Boolean = true ; mclListener.onLoadInit = function(target_mc:MovieClip) { movieClips.push(target_mc); target_mc.onRollOver = stopAll; }; this.onEnterFrame = manageMovieClips; function manageMovieClips () { if (allowMove) { for (i in movieClips) { var item:MovieClip = movieClips[i]; var w:Number = item._width ; var h:Number = item._height ; if (item._x < -w){ item._x = num_img * w; } item._x -= 2; } } else { delete this.onEnterFrame ; //остановка всего } } function stopAll () { allowMove = false ; } Последний раз редактировалось mooncar; 10.11.2009 в 15:37. |
|
|||||
Большое спасибо. Все работает как надо!
Вы все правильно поняли. Суть замысла была в следующем: В _root лежит клип mc. В нем создаются клипы image1, image2 и т.п., в каждый из которых загружается картинка. после этого клип image2 получает координату image2 ._x=image1._width Результат - линия, построенная из изображений - бегущая галерея. Все элементы движутся с одной скоростью, в одну сторону. Интерактивность заключается в том, что onRollOver останавливает "строку", а onRollOut - запускает ее снова, и onRelease, соответственно открывает окно с исходным изобра . Для onRollOut, опираясь на Ваш код, я написал: Здесь спасибо Вам за подсказку, т.к. в последний раз я что-то кодил в AS2 лет 5 назад, и с тех пор запомнилась только одна форма описания событий - та, что в моем изначальном примере.
__________________
О добром, разумном, вечном... |
|
|||||
Модрон-ветеринар
|
Ага, для onRollOut все аналогично.
|
|
|||||
Пришлось вернуться к теме, т.к. скрипт потребовал усовершенствований.
Как выстроить картинки в один ряд по горизонтали - без интервала, например? Картинки - все разные по ширине. Сейчас код выгляди так: fn0 = '1.jpg'; fn1 = 'f7.JPG'; fn2 = 'P10105096.JPG'; fn3 = 'P10105097.JPG'; fn4 = 'g8.JPG'; fn5 = 'g12.JPG'; fn6 = 'g16.JPG'; fn7 = 'P1010095.JPG'; fn8 = 'P10105107.JPG'; fn9 = 'd11.JPG'; fn10 = 'd15.JPG'; fn11 = 'DSC00103.JPG'; fn12 = 'IMG_1851_.jpg'; fn13 = 'IMG_1856_.jpg'; fn14 = 'P101g0012.JPG'; fn15 = 'P10100g13.JPG'; fn16 = 'IMG_1859.jpg'; fn17 = 'IMG_1862.jpg'; fn18 = 'IMG_1864.jpg'; fn19 = 'k8.JPG'; fn20 = 'k22.JPG'; count = '21'; this.createEmptyMovieClip("image_mc",this.getNextHighestDepth()); var mclListener:Object = new Object(); var movieClips:Array = new Array(); var allowMove:Boolean = true ; mclListener.onLoadInit = function(target_mc:MovieClip) { movieClips.push(target_mc); target_mc.onRollOver = stopAll; target_mc.onRollOut = startAll; target_mc.onRelease = OpenFull; _root.mc._alpha=0; }; this.onEnterFrame = manageMovieClips; function manageMovieClips () { if (movieClips.length == num_img){ if(_root.mc._alpha < 100){ _root.mc._alpha+=5; } } if (allowMove) { for (i in movieClips) { var item:MovieClip = movieClips[i]; var w:Number = item._width ; var h:Number = item._height ; //if (h<w or h<107){ //index = 107*100/h; item._yscale = 107*100/h; item._xscale = 107*100/h; //var w:Number = item._width ; //var h:Number = item._height ; //} if (item._x < -w){ item._x = num_img * ( w + 5 )-w; } if (movieClips.length == num_img){ item._x -= 1; } } } else { delete this.onEnterFrame ; //остановка всего } } function stopAll () { for(i=0;i<=movieClips.length;i++){ if(movieClips[i] != this){ movieClips[i]._alpha = 80; } } if(i<=80){ allowMove = false ; } } function startAll () { for(i=0;i<=movieClips.length;i++){ if(movieClips[i] != this){ movieClips[i]._alpha = 100; } } if (allowMove != true){ allowMove = true; this.onEnterFrame = manageMovieClips; } } function OpenFull () { var mySubstring:Number = this._name.substring(7,9); if(this._width > this._height){ image_link = "javascript:OpenFile('images_gallery/index.php?img="+_root["fn"+mySubstring]+"',"+(this._width*3.5)+","+(this._height*3.5)+")"; }else{ image_link = "javascript:OpenFile('images_gallery/index.php?img="+_root["fn"+mySubstring]+"',"+(this._width*2.6)+","+(this._height*2.6)+")"; } getURL (image_link); } var image_mcl:MovieClipLoader = new MovieClipLoader(); image_mcl.addListener(mclListener); //num_img = _root.count; num_img = this.count; for (i=0; i<num_img; i++) { this.createEmptyMovieClip("clip_mc"+i,-i); var image_mcl:MovieClipLoader = new MovieClipLoader(); image_mcl.addListener(mclListener); // fname = "../images_gallery/"+_root["fn"+i]; fname = "../images_gallery/"+this["fn"+i]; trace (fname); image_mcl.loadClip(fname,this["clip_mc"+i]); this["clip_mc"+i]._x = i*150; // здесь надо бы нормальные координаты } Все картинки я уменьшаю пропорционально до 107px по высоте. но это происходит после загрузки... и после расстановки картинок по горизонтали. Соответственно, после уменьшения размеров картинки, они оказываются не рядом друг с другом. Докучи, сейчас картинки стремятся к исходным размерам в каждом новым кадре Как исправить ситуацию? Добавлено через 1 час 4 минуты Спасибо форуму за то что он есть!! Ибо не задав вопроса, сам бы так и не додумался. Решение найдено!
__________________
О добром, разумном, вечном... |
Часовой пояс GMT +4, время: 12:02. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|