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

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

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

Регистрация: Jul 2008
Сообщений: 72
По умолчанию onRelease = function()

не пойму почему в коде
Код AS1/AS2:
function Vertical() {
 
	/******id темы - для обращения к базе и вывода горизонтального списка************/
	/****************************************************************/
	//обработчик для передачи параметров
	formData = new LoadVars();
	//при загрузке флешки в пустое поле выводить сообщение
	formData.onLoad = function(success:Boolean) {
		if (success) {
 
			//стартовая позиция картинок по X
			var startXv:Number = vert_x;
			//стартовая позиция картинок по Y
			var startYv:Number = vert_y;
			//текущая координата картинки
			var currImageXv:Number = 0;
 
			// создаём пустой клип с нужными координатами для панели прокрутки с мелкими фотками
			_root.createEmptyMovieClip("container_mcV",_root.getNextHighestDepth());
			container_mcV._x = vert_x;
			container_mcV._y = vert_y;
 
			//вносим список имён тем в массив
 
			var my_str1:Array= formData.name_tema
			var nameTemes_array = new Array();
			nameTemes_array = my_str1.split("$$");
 
			//вносим ID тем
			var my_str2:Array= formData.id_tema;
			var idTemes_array = new Array();
			idTemes_array = my_str2.split("$$");
 
			 _global.sdvigV = _global.imageShift * (nameTemes_array.length-1);
			//пока не кончится все фотки  загружаем их в контейнер
 
 
			for (var i = 0; i<nameTemes_array.length-1; i++)
			//for (var i = 0; i<3; i++)
			{		
				//добовляем картинку из библиотеки
				var tema:MovieClip = _root.container_mcV.attachMovie("tema","tema"+i,i);
				//оптимизируем скрипт создавая переменную tema передавая ей ссылку на нашу картинку
 
 
				tema._x = startXv;
				tema._y = startYv;
				//выщитываем новую координату для следующей картинки
				startYv += tema._height+_global.imageShift;
 
 
 
		        tema.temaText.text = nameTemes_array[i];
				//массивы для передачи ID темы и имя темы чтобы передать функции отображения
				//горизонтального списка
				tema.IdKey_array = idTemes_array[i];
				tema.IdName_array = nameTemes_array[i];
 
 
 
			//принажатии на изображение вызываем горизонтальную панель
			tema.onRelease = function() {
 
				Gorizontal(idTemes_array[i],nameTemes_array[i]);
				/*var test:MovieClip = _root.main.attachMovie("test","test",_root.getNextHighestDepth());
				test._x = 100;
				test._y = 100;
 
				//test.test_txt.text = "ПРОБА";
				test.test_txt.text =i;*/
				//trace(i);
 
			};
             //при наведении на изображение - прозрачность на 50%
			tema.onRollOver = function() {
				this._alpha = 50;
			};
            // и наоборот
			tema.onRollOut = function() {
				this._alpha = 100;
			};
 
			if (i == 0)//если первый запрос то загружаем сразу первую temu
                {                                               //здесь вызов срабатывает 
					//Gorizontal(idTemes_array[i],nameTemes_array[i]);
                }
 
				createMaskVert();
				//scrolling();
 
		}
 
 
		} else{
				//tema.temaText.text = "Error loading/parsing LoadVars.";
	    }
 
 
	};
	//обмен данными с MySQL значения объекта formData методом POST
	formData.sendAndLoad('phpinitializ.php',formData,'POST');
 
 
 
}
в цикле
Код AS1/AS2:
test.test_txt.text =i;
всегда равен
Код AS1/AS2:
nameTemes_array.length-1
а хотелось бы чтобы равен номеру кнопки которой вызываю функцию.
т.е. не получается передать значение переменнной из массива в зависимости от номера кнопки( мувика) в списке. подскажите пожалуйста где накосячил?

Добавлено через 3 минуты
.т.е. в данном коде при нажатии кнопок tema0, tema1, итд - вызываеться Gorizontal(idTemes_array[i],nameTemes_array[i]); где i равно наибольшему i в этом цикле =(

Старый 27.02.2009, 23:29
Fatality вне форума Посмотреть профиль Отправить личное сообщение для Fatality Найти все сообщения от Fatality
  № 2  
Ответить с цитированием
Fatality
 
Аватар для Fatality

Регистрация: Jan 2009
Адрес: Одесса
Сообщений: 309
Отправить сообщение для Fatality с помощью ICQ
Дело в том, что событие onRelease, будет вызываться после выполнения цикла. Соответственно i равно своему последнему значению. Чтобы данная конструкция работала нормально, необходимо выполнить привязку переменной i в текущей итерации цикла, к конкретному клипу. Но, так как даная привязка уже выполнена(глубина клипа), можно сделать так
Код AS1/AS2:
tema.onRelease = function() 
{
var id:Number = this.getDepth();
Gorizontal(idTemes_array[id], nameTemes_array[id]);
}

Старый 27.02.2009, 23:31
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS1/AS2:
for (var i = 0; i < nameTemes_array.length - 1; i++) {
	...
	tema.onRelease = function () {
		Gorizontal (idTemes_array[i], nameTemes_array[i]);
	};
}
В момент вызова onRelease, i имеет совсем другое значение. Поэтому нужно для конкретного клипа сохранить значение i во внутреннюю переменную.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.02.2009, 23:34
sector_222 вне форума Посмотреть профиль Отправить личное сообщение для sector_222 Найти все сообщения от sector_222
  № 4  
Ответить с цитированием
sector_222
 
Аватар для sector_222

Регистрация: Jul 2008
Сообщений: 72
спасибо =)
век живи - век учись

Добавлено через 1 минуту
Код AS1/AS2:
tema.onRelease = function() 
{
var id:Number = this.getDepth();
Gorizontal(idTemes_array[id], nameTemes_array[id]);
}
так и сделал =)

Старый 28.02.2009, 00:57
scarbo вне форума Посмотреть профиль Отправить личное сообщение для scarbo Найти все сообщения от scarbo
  № 5  
Ответить с цитированием
scarbo
 
Аватар для scarbo

Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
Вообще,от такой конструкции в циклах mc.onRelease(или on_любой_обработчик_событий) = function(){},лучше отказаться,а использовать
Код AS1/AS2:
for(var i=0;i<10;i++){
var mc:MovieClip = target['mc'+i];
mc.id = i;//сохранили id мувика
mc.onRollOver = mcOver;
mc.onRollOut = mcOut;
mc.onPress = mcPress;
}
//а теперь уже за циклом описываем эти функции
function mcOver(){
trace(this);
}
function mcPress(){
trace(this.id);
}
Но это сугубо мое личное мнение,просто так код приятнее выглядит,и более четко разбит по блокам.

Старый 28.02.2009, 15:18
sector_222 вне форума Посмотреть профиль Отправить личное сообщение для sector_222 Найти все сообщения от sector_222
  № 6  
Ответить с цитированием
sector_222
 
Аватар для sector_222

Регистрация: Jul 2008
Сообщений: 72
ну так ещё грамотней - спасибо, запомню

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

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

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


 


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


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