![]() |
|
||||||||||
|
|||||
|
[+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("моё значение"); ,а не SWFAddress.setValue(buttonAttrib.url); Последний раз редактировалось bettrrr; 18.09.2007 в 21:06. |
|
|||||
|
...
модератор форума
Регистрация: 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;
}
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
bettrrr, если на ваше сообщение уже ответили не нужно его редактировать, создавайте новый пост.
buttonAttrib -- это переменная которыю вы создаете при первой итерации, в последующих ее значение постоянно перезаписывается, следоватьельно, ваши функции, ссылки на которые вы записываете в обработчики, будут использовать последнее значение, которое запишется в buttonAttrib. Я предложил два действующих варианта, следовательно, ошибка в другом месте. |
|
|||||
|
[+4 06.08.07]
Регистрация: Aug 2002
Сообщений: 44
|
Цитата:
.Про buttonAttrib я понял, предварительно сломав себе мозг, т.к. я привык к другому поведению кода. Нажал на ссылку, заново выполнился скрипт и т.п. (разовое линейное выполнение кода). Если бы я такое написал на PHP, то всё бы прекрасно работало. Я думал, что этот цикл создаст кучу кнопок, и каждой назначит обработчик, а в этот обработчик передаст (присвоит) ЗНАЧЕНИЕ переменной. А оказалось, что в обработчик передаётся ссылка на область памяти, которая после отработки цикла, содержит последнее значение. Второй способ не работает так, как мне это надо, т.к. у меня нет this.url, а первый работает, что мне не понятно. поясните пожалуйста, чем для плеера отличаются ваш первый способ и мой? Т.е. почему в вашем способе используется значение переменной текущего шага цикла, а не последнее? Последний раз редактировалось bettrrr; 19.09.2007 в 12:27. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
На счет второго способа. Возможно вы упустили момент:
По поводу первого. Ссылки в возвращаемых функциях указывают на параметры, указанные при генерации (т.е. на локальные переменные генерирующей функции), которые, по всей видимости, не удаляются (возможно, от того, что на них и указывают эти ссылки). |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|