PDA

Просмотр полной версии : Глюк с надписью в дубликатах кнопки


DJ_ManiaC
16.07.2007, 17:24
Вопрос в следующем. Непонятно мне почему такое происходит. Делаю несколько одинаковых клипов методом attachMovie, в которых используется одна и таже мувик-кнопка сделаная по принципу тригера. При нажатии на эту кнопку в ней должна изменится надпись. А она, т.е. надпись, при нажатии на первую созданную кнопку меняется как надо, а в последующих отображается та которая забита в шаблоне. Хотя в них переменная которая отвечает за изменение надписи меняется коректно. Если создавать эти клипы с кнопкой внутри вручную - всё ок. Непойму в чём трабл. Для ясности выложил пример. Файл для Flash 8.

DJ_ManiaC
16.07.2007, 23:06
Ну что люди? Никто не знает или всем исходник посмотреть лень? Я искал ответ на этот вопрос но так и не нашёл... Помогите пожалуйста разобраться... Там я думаю всё из-за анимации, но почему???

etc
16.07.2007, 23:08
Плюс за ап.

DJ_ManiaC
16.07.2007, 23:15
Плюс за ап.
Ну извините... :umnik2: А как ещё быть? Если топа на первой странице нет - его никто не посмотрит и соответственно не ответит... За новую тему тоже бы плюс добавили...

etc
16.07.2007, 23:17
Ну извините... :umnik2: А как ещё быть? Если топа на первой странице нет - его никто не посмотрит и соответственно не ответит... За новую тему тоже бы плюс добавили...
Ждать надо ответа, а не через несколько часов тему поднимать.
Есть такая вещь, как «Новые сообщения». Оттуда никуда тема не денется.

Wolsh
17.07.2007, 00:41
Замени matchNumber на растущую переменную, хоть на тот же NextLayer, и всё заработает
у тебя эти кнопки имена одинаковые получают при аттаче

DJ_ManiaC
17.07.2007, 09:38
Спасибо, смысл понял и разобрался. У меня просто в другом коде matchNumber берётся из XML. Но вот строку где задаётся значение этой переменной я нечаянно при редактировании кода удалил, поэтому и возник такой глюк.

DJ_ManiaC
20.07.2007, 10:48
Разобрался с одним, теперь другой вопрос появился и опять по той же кнопке. Немного переделал файл - пытаюсь теперь на все созданные програмно кнопки, повесить процедуру нажатия.
До изменения код был такой:
NextStringY = 0
NextLayer = 0
n = 10
while (NextLayer != n) {
attachMovie("Str_ListBotton","Str_List" + matchNumber, NextLayer, {_x: 0, _y:NextStringY});
NextStringY += 18
NextLayer += 1
}

После изменения стал такой:
NextStringY = 0
NextLayer = 1
matchNumber = 1
n = 10
while (NextLayer != n) {
var targetClip:MovieClip = createEmptyMovieClip("Match_" + matchNumber, NextLayer);
targetClip.attachMovie("Str_ListBotton","Str_ListBotton", 0);

// Вот с этой функцией кнопка нормально не работает
targetClip.Str_ListBotton.ListBotton.onPress = function () {
trace(targetClip);
}

NextStringY += 18
NextLayer += 1
matchNumber += 1
}
То что некоректно работает выделил в коде...
Подскажите почему когда добавляю функцию на нажатие кнопки, она работает, а все функции что внутри кнопки нет...
И ещё интересно, как сделать чтоб при нажатии выводился "Интенс Нейм" пустого клипа который создаётся в моём коде, и в который аттачится клип с кнопкой.

Wolsh
20.07.2007, 13:19
у тебя там наверно ролловеры пересекаются? были навешаны на fon

DJ_ManiaC
20.07.2007, 13:45
Процедура РоллОвер есть внутри кнопки, но она по идее должена относится к той кнопке на которую наводишь мышку, по крайней мере я думал что именно так оно и будет... Или у РоллОвера есть какие-то ограничения или специфики применения? Можно конечно сделать весь код для onPress внутри кнопки-мувика, и всё это будет работать (проверял), но я хочу эту кнопку применять в нескольких местах, и получается что общее между ними будет только анимация. Соответственно, нужно как-то сделать, чтобы событие onPress обрабатывалось и внутри кнопки и внешним кодом... И ещё внутри должны быть функции RollOver и RollOut - они сейчас именно там и есть, т.е. внутри кнопки-мувика.
Даже если я уберу процедуры к RollOver и RollOut - эффекта никакого... Анимация по нажатию так же не воспроизводится, выполняется только процедура onPress которая обозначена в РУТЕ...
Кому лениво смотреть исходник код внутри мувика кнопки такой:
BottonLabel = label_1
fon.onRollOver = function() {
ArrowAnim.cursor = true;
ArrowAnim.play();
Ligth.play()
}
fon.onRollOut = function() {
ArrowAnim.cursor = false;
ArrowAnim.play();
Ligth.play()
}
fon.onPress = function() {
if (BottonLabel == label_1) {
BottonLabel = label_2;
ArrowAnim.play();
LabelAnim.play();
LightAnim.play();
} else {
BottonLabel = label_1
ArrowAnim.play();
LabelAnim.play();
LightAnim.play();
}
}

Wolsh
20.07.2007, 15:34
И что мешает тебе вынести этот код в рут и включить в рутовое событие на кнопку?
Две области на разных слоях полностью совпадают и на обе - ролловер(в это понятие входят все события - пресс, аут и т.д.)
Как же ты думаешь плеер решит, на что ты нажал - на верхний слой или на нижний? Так просто нельзя делать, не работает. Придется искать вариант с одной активной областью. В данном случае это не особенно сложно, бывают ситуации гораздо хуже :)
pS Чтоб узнать Instance Name есть cвойство _name
ppS И выложи уже новый исходник. И хмелку положи для примера.

DJ_ManiaC
20.07.2007, 18:18
Конечно можно всё в руте прописать, но я думаю это не очень удобно дублировать код на анимацию в разных частях клипа...
Я думал что так делать можно, объявляя в разных функциях события на onPress, onRoll и т.д., для одного МУВА. Просто по идее они должны одновременно вызываться... Ведь работает же несколько кнопок положенных на сцену вручную... Или же програмно, но без объявления в руте функции onPress, чтоб весть код был внутри кнопки.
Новый исходник прилагается...
P.S. Как в моём цикле в процедуре на нажатие сделать чтоб выводился Intance Name нужного объекта???
Пробовал изменить строку с trace(targetClip);
на trace(targetClip._name)
но мне выводится при нажатии на любую кнопку только имя последнего обработанного клипа. Пробовал так же запихивать при обработке переменную в мувик кнопки, но как не старался к ней обратится, мне выводт Undefined. Подскажите как правильно в цикле это всё обозначить, чтоб выводилась нужная переменная из определённого клипа (клипы имеют название к примеру "Str_ListBotton"+X. где X это произвольный номер кнопки)

Что такое хорошо?
20.07.2007, 22:22
...... Как в моём цикле в процедуре на нажатие сделать чтоб выводился Intance Name нужного объекта???.... Подскажите как правильно в цикле это всё обозначить, чтоб выводилась нужная переменная из определённого клипа .....

пост # 8
http://flasher.ru/forum/showthread.php?t=84941

Wolsh
23.07.2007, 13:04
Ну да, у тебя тоже this._parent._parent._name для кнопочек будет разным, а всё остальное - одинаковым.
Ну а функции наверно можно в цикле на таргет вешать - не смотри что target._name одинаковые, родительские клипы - разные, так что сами клипы тоже разные.

DJ_ManiaC
23.07.2007, 16:20
Что такое хорошо? Спасибо за пример... Подумав я сделал немного по другому:
Поменял код цикла на следующее:
while (NextLayer != n) {
var targetClip:MovieClip = createEmptyMovieClip("Match_" + matchNumber, NextLayer);
targetClip.attachMovie("Str_ListBotton","Str_ListBotton", 0, {_x: 0, _y:NextStringY});
targetClip.matchNumber = matchNumber
targetClip.Str_ListBotton.ListBotton.onPress = function () {
trace(this._parent._parent.matchNumber);
};

NextStringY += 18
NextLayer += 1
matchNumber += 1
}
Мои непонятки были связанны с путями по которым нужно ссылаться на нужные переменные. Почитав нужную литературку - до меня дошло что нужно использовать относительный путь от от объявляемой функции к переменной...

Wolsh
23.07.2007, 17:54
Я так понял тебе типа этого надо? Глянь переработанный примерчик (http://wolsh.pisem.net/flashcard/Primer1byWolsh.rar).
Извини что выходные промолчал, у меня молнией сетевуху прожгло :) Серьёзно!

DJ_ManiaC
23.07.2007, 23:53
Wolsh Спасибо что остался неравнодушным к моей проблеме, и направил на путь истинный :) Да нужно было именно это, но я сам уже всё доделал - код в моём предыдущем сообщении. Правда там я ещё не перенёс код для анимации из мувика-кнопки. :) У меня весь косяк был связан с непониманием путей... точнее как они в функции могут работать. Теперь я удачно убрал этот пробел из своих знаний :)