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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.09.2007, 19:26
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 1  
Ответить с цитированием
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
По умолчанию цикл создаёт кнопки.

AS2 создаёт некоторое количество кнопок при помощи ф-ции _root.createEmptyMovieClip.
во время создания каждой из кнопок в клипе-кнопке рисуется прямоугольник, который будет областью для клика.

После компиляции, при нажатии на любую кнопку происходит переход не на разные ссылки, а на одинаковую, независимо от того, на какую кнопку я нажал.
Код:
for(i in ppmn){
			buttonAttrib = ppmn[i].attributes;
			_root.createEmptyMovieClip(buttonAttrib.id, _root.getNextHighestDepth());
//подготовка переменных с координатами для рисования квадрата
			x1 = Number(buttonAttrib.x);
			y1 = Number(buttonAttrib.y);
			x2 = (Number(buttonAttrib.x) +  Number(buttonAttrib.w));
			y2 = (Number(buttonAttrib.y) + Number(buttonAttrib.h));
//Рисование квадрата
			with (_root[buttonAttrib.id]) {
				useHandCursor = true
				beginFill (buttonAttrib.x + 10, buttonAttrib.y + 10);
				moveTo (x1, y1);
				lineTo (x2, y1);
				lineTo (x2, y2);
				lineTo (x1, y2);
				lineTo (x1, y1);
				endFill ();
			}
//События			
_root[buttonAttrib.id].onRelease = function () {
				trace(buttonAttrib.url);
				SWFAddress.setValue(buttonAttrib.url);
			}
			_root[buttonAttrib.id].onRollOver = function() {
				SWFAddress.setStatus(buttonAttrib.url);
			}
			_root[buttonAttrib.id].onRollOut = function() {
				SWFAddress.resetStatus();
			}
			_root.error_txt.text = _root.error_txt.text + buttonAttrib.x;
		}
мне кажется, что тут проблема с уровнями.... но это догадка, и я не знаю как это исправить.

PS: После решения проблемы со ссылками, как мне сделать, чтобы кнопки нажимались, но их небыло видно? Альфа = 0 - это тру?

++++++++++++++++++++++++++++++++++++++++++++++++++++++

Теперь появилось другое предполажение, что проблема тут:
Код:
_root[buttonAttrib.id].onRelease = function () {
	trace(buttonAttrib.url);
	SWFAddress.setValue(buttonAttrib.url);
}
возможно после завершения цикла, строка SWFAddress.setValue(buttonAttrib.url); для каждой из кнопок имеет именно такой вид (вуквально), а не то, что я бы хотел получить.

Мне надо, чтобы после выполнения цикла, у меня для каждой кнопки эта строка имела вид:
SWFAddress.setValue("моё значение");
,а не
SWFAddress.setValue(buttonAttrib.url);


Последний раз редактировалось bettrrr; 18.09.2007 в 21:06.
Старый 18.09.2007, 20:40
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Не тестировал, но должно работать.
Код:
function generator(url:String):Function {
	return function () {
		trace(url);
		SWFAddress.setValue(url)
	};
}
for (i in ppmn) {
	buttonAttrib = ppmn[i].attributes;
	_root.createEmptyMovieClip(buttonAttrib.id, _root.getNextHighestDepth());
	// ----  второй способ
	_root[buttonAttrib.id].url = buttonAttrib.url
	//
	//подготовка переменных с координатами для рисования квадрата
	x1 = Number(buttonAttrib.x);
	y1 = Number(buttonAttrib.y);
	x2 = (Number(buttonAttrib.x)+Number(buttonAttrib.w));
	y2 = (Number(buttonAttrib.y)+Number(buttonAttrib.h));
	//Рисование квадрата
	with (_root[buttonAttrib.id]) {
		useHandCursor = true;
		beginFill(buttonAttrib.x+10, buttonAttrib.y+10);
		moveTo(x1, y1);
		lineTo(x2, y1);
		lineTo(x2, y2);
		lineTo(x1, y2);
		lineTo(x1, y1);
		endFill();
	}
	//События			
	// ----  первый способ
	_root[buttonAttrib.id].onRelease = generator(buttonAttrib.url)
	// ----  второй способ
	_root[buttonAttrib.id].onRollOver = function() {
		SWFAddress.setStatus(this.url);
	};
	//
	_root[buttonAttrib.id].onRollOut = function() {
		SWFAddress.resetStatus();
	};
	_root.error_txt.text = _root.error_txt.text+buttonAttrib.x;
}
PS: Чтобы не было видно кнопок, но они нажимались: _root[buttonAttrib.id]._alpha = 0

Старый 18.09.2007, 21:26
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
bettrrr, если на ваше сообщение уже ответили не нужно его редактировать, создавайте новый пост.
Код:
_root[buttonAttrib.id].onRelease = function () {
	trace(buttonAttrib.url);
	SWFAddress.setValue(buttonAttrib.url);
}
buttonAttrib -- это переменная которыю вы создаете при первой итерации, в последующих ее значение постоянно перезаписывается, следоватьельно, ваши функции, ссылки на которые вы записываете в обработчики, будут использовать последнее значение, которое запишется в buttonAttrib. Я предложил два действующих варианта, следовательно, ошибка в другом месте.

Старый 19.09.2007, 12:09
bettrrr вне форума Посмотреть профиль Отправить личное сообщение для bettrrr Найти все сообщения от bettrrr
  № 4  
Ответить с цитированием
bettrrr
[+4 06.08.07]

Регистрация: Aug 2002
Сообщений: 44
Цитата:
Сообщение от udaaff
bettrrr, если на ваше сообщение уже ответили не нужно его редактировать, создавайте новый пост.
Код:
_root[buttonAttrib.id].onRelease = function () {
	trace(buttonAttrib.url);
	SWFAddress.setValue(buttonAttrib.url);
}
buttonAttrib -- это переменная которыю вы создаете при первой итерации, в последующих ее значение постоянно перезаписывается, следоватьельно, ваши функции, ссылки на которые вы записываете в обработчики, будут использовать последнее значение, которое запишется в buttonAttrib. Я предложил два действующих варианта, следовательно, ошибка в другом месте.
Вы ответили в процессе редактирования мною моего поста .

Про buttonAttrib я понял, предварительно сломав себе мозг, т.к. я привык к другому поведению кода. Нажал на ссылку, заново выполнился скрипт и т.п. (разовое линейное выполнение кода). Если бы я такое написал на PHP, то всё бы прекрасно работало.

Я думал, что этот цикл создаст кучу кнопок, и каждой назначит обработчик, а в этот обработчик передаст (присвоит) ЗНАЧЕНИЕ переменной.
А оказалось, что в обработчик передаётся ссылка на область памяти, которая после отработки цикла, содержит последнее значение.

Второй способ не работает так, как мне это надо, т.к. у меня нет this.url, а первый работает, что мне не понятно.



поясните пожалуйста, чем для плеера отличаются ваш первый способ и мой? Т.е. почему в вашем способе используется значение переменной текущего шага цикла, а не последнее?


Последний раз редактировалось bettrrr; 19.09.2007 в 12:27.
Старый 19.09.2007, 22:43
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
На счет второго способа. Возможно вы упустили момент:
Код:
_root[buttonAttrib.id].url = buttonAttrib.url
По поводу первого. Ссылки в возвращаемых функциях указывают на параметры, указанные при генерации (т.е. на локальные переменные генерирующей функции), которые, по всей видимости, не удаляются (возможно, от того, что на них и указывают эти ссылки).

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

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

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


 


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


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