Просмотр полной версии : Как повлиять на все клипы сразу?
Здравствуйте.
Есть ряд загруженных картинок одинаковых размеров, помещенных в клипы.
Для каждого клипа по окончанию загрузки выполняется код:
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() {
// По событию, все мувики должны остановиться.
};
};
};
Как реализовать _x = _x для всех клипов?
Иными словами, нужно по событию остановить скролл для всех клипов.
Пробовал двигать родительский клип, и отлавливать событие для него - тогда получается, но как быть с "зацикливанием" бегущей строки? Как в таком случае узнать координаты _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 ;
}
Большое спасибо. Все работает как надо!
Вы все правильно поняли.
Суть замысла была в следующем:
В _root лежит клип mc. В нем создаются клипы image1, image2 и т.п., в каждый из которых загружается картинка. после этого клип image2 получает координату image2 ._x=image1._width
Результат - линия, построенная из изображений - бегущая галерея.
Все элементы движутся с одной скоростью, в одну сторону.
Интерактивность заключается в том, что onRollOver останавливает "строку", а onRollOut - запускает ее снова, и onRelease, соответственно открывает окно с исходным изобра . Для onRollOut, опираясь на Ваш код, я написал:
mclListener.onLoadInit = function(target_mc:MovieClip) {
.....
target_mc.onRollOut = startAll;
};
function startAll () {
allowMove = true ;
this.onEnterFrame = manageMovieClips;
}
Здесь спасибо Вам за подсказку, т.к. в последний раз я что-то кодил в 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; // здесь надо бы нормальные координаты
}
переменные [fn+i] и count генерятся в php, поэтому я их пока зарэмил и прописал руками.
Все картинки я уменьшаю пропорционально до 107px по высоте.
но это происходит после загрузки... и после расстановки картинок по горизонтали.
Соответственно, после уменьшения размеров картинки, они оказываются не рядом друг с другом.
Докучи, сейчас картинки стремятся к исходным размерам в каждом новым кадре
Как исправить ситуацию?
Добавлено через 1 час 4 минуты
Спасибо форуму за то что он есть!!
Ибо не задав вопроса, сам бы так и не додумался.
Решение найдено! :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.