Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2009, 11:27
deep70 вне форума Посмотреть профиль Отправить личное сообщение для deep70 Посетить домашнюю страницу deep70 Найти все сообщения от deep70
  № 1  
Ответить с цитированием
deep70
 
Аватар для deep70

Регистрация: Apr 2006
Адрес: Екатеринбург
Сообщений: 55
Отправить сообщение для deep70 с помощью ICQ
По умолчанию Как повлиять на все клипы сразу?

Здравствуйте.
Есть ряд загруженных картинок одинаковых размеров, помещенных в клипы.
Для каждого клипа по окончанию загрузки выполняется код:

Код AS1/AS2:
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 относительно корня а не родителя?
__________________
О добром, разумном, вечном...

Старый 10.11.2009, 14:38
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
По какому событию все мувики должны остановится? По RollOver'у одного из них?
Что значит _x = _x? Все должны встать в точку с одной и той же координатой _x ?
Какая бегущая строка? Какой такой _root.mc.image1?
Не очень понятно, что к чему и что вам нужно. Начали описывать все хорошо, а потом все запутали. Выделите и сформулируйте один вопрос, но с толком.

Может быть, вот так?
Код AS1/AS2:
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.
Старый 10.11.2009, 17:09
deep70 вне форума Посмотреть профиль Отправить личное сообщение для deep70 Посетить домашнюю страницу deep70 Найти все сообщения от deep70
  № 3  
Ответить с цитированием
deep70
 
Аватар для deep70

Регистрация: Apr 2006
Адрес: Екатеринбург
Сообщений: 55
Отправить сообщение для deep70 с помощью ICQ
Большое спасибо. Все работает как надо!
Вы все правильно поняли.
Суть замысла была в следующем:
В _root лежит клип mc. В нем создаются клипы image1, image2 и т.п., в каждый из которых загружается картинка. после этого клип image2 получает координату image2 ._x=image1._width
Результат - линия, построенная из изображений - бегущая галерея.
Все элементы движутся с одной скоростью, в одну сторону.
Интерактивность заключается в том, что onRollOver останавливает "строку", а onRollOut - запускает ее снова, и onRelease, соответственно открывает окно с исходным изобра . Для onRollOut, опираясь на Ваш код, я написал:
Код AS1/AS2:
mclListener.onLoadInit = function(target_mc:MovieClip) {
 .....
	target_mc.onRollOut = startAll;
 
};
function startAll () {
	allowMove = true ;
	this.onEnterFrame = manageMovieClips; 
}
Здесь спасибо Вам за подсказку, т.к. в последний раз я что-то кодил в AS2 лет 5 назад, и с тех пор запомнилась только одна форма описания событий - та, что в моем изначальном примере.
__________________
О добром, разумном, вечном...

Старый 10.11.2009, 17:15
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ага, для onRollOut все аналогично.

Старый 17.12.2009, 17:50
deep70 вне форума Посмотреть профиль Отправить личное сообщение для deep70 Посетить домашнюю страницу deep70 Найти все сообщения от deep70
  № 5  
Ответить с цитированием
deep70
 
Аватар для deep70

Регистрация: Apr 2006
Адрес: Екатеринбург
Сообщений: 55
Отправить сообщение для deep70 с помощью ICQ
Пришлось вернуться к теме, т.к. скрипт потребовал усовершенствований.
Как выстроить картинки в один ряд по горизонтали - без интервала, например?
Картинки - все разные по ширине.

Сейчас код выгляди так:
Код AS1/AS2:
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 минуты
Спасибо форуму за то что он есть!!
Ибо не задав вопроса, сам бы так и не додумался.
Решение найдено!
__________________
О добром, разумном, вечном...

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.