Просмотр полной версии : 2 вопроса в одном!
rojok-online
11.04.2004, 23:36
Привет!
Вообще голова не соображает.. ((( в чем проблемы :confused:
1.Хотел сделать как бы кнопки с простенькой анимацией... И не получатеся только одна штука ( ---- При наведении двигается треугольничек, а при отведении мышки от кнопки треугольничек останавливается. Когда нажимаешь то треагольничек меняет цвет и двигается... Проблема в том что при нажатии на другую кнопку на прошлой происходит анимация и только останавливается когда убираешь с той кнопки мышку... ( Тобишь проигрывается 2 анимации, хотя должна проигрываться одна...
2. После "// temp" идет код который странно как- то работает... Если его поставить перед "// Buttons", то он вообще не работает, а если в конец, то в "// Buttons" пропадают 1, 2 и 3 кнопка... В чем проблема?
//Buttons
button_name = ["button # 1", "button # 2", "button # 3", "button # 4", "button # 5", "button # 6", "button # 7"];
osy = [85, 110, 135, 160, 185, 210, 235];
osx = [10, 10, 10, 10, 10, 10, 10];
for (i=0; i<button_name.length; i++) {
attachMovie("button", "button"+i, i);
this["button"+i]._x = osx[i];
this["button"+i]._y = osy[i];
this["button"+i].button.text = button_name[i];
this["button"+i].tr.stop();
this["button"+i].onRollOver = function() {
this.tr.play();
};
this["button"+i].onPress = function() {
this.tr.gotoAndPlay(13);
_root.lastbutton = this._name;
};
this["button"+i].onRollOut = this["button"+i].onRelease=function () {
if (_root.lastbutton == this._name) {
this.tr.play();
} else {
this.tr.gotoAndStop(1);
}
};
}
// temp
x = [20, 278.5, 536];
for (i1=0; i1<x.length; i1++) {
with (attachMovie("mini", "mini"+i1, i1)) {
_x = x[i1];
_y = 300;
}
}
(сори если описал вопросы непонятно)
Сложно разобраться, приколи исходник или напиши подробные коменты
artfla$her
12.04.2004, 00:50
Короче, ты чего-то намудрил и сам себя запутал.... Не понимаю, что вы так все мудрите?:) Во-первых, лучше дублируй клип, так как, если я не ошибаюсь, при attach-е не все вложенные в attach-ируемый клип объекты тоже дублируются - это надо производить отдельно. Проще сделай так
for(i=0;i<button_name.length;i++){
duplicateMovieClip("button", "button"+i, i);
setProperty("button"+i, _x, нужный x)
setProperty("button"+i, _y, нужный y)
//дальше вбиваем текст в кнопки и проч.
//задаешь события, как и раньше
}
//и прочая дурь
Кнопки исчезают у тебя потому, что у них совпадают уровни!
У клипов не должны совпадать уровни (уровень задается третьим параметром в функции). Смотри, у тебя вначале кнопки приобретают уровни 0,1,2,3,4,5,6, а потом эти "mini" тоже уровни 0,1,2 (и три кнопки исчезают). Если бы у тебя массив x был большей длины, исчезло бы все... Я рекомендую создать переменную, в которой будет храниться номер самого высокого уровня. Например
allDepths=0
И потом третьим параметром функция дублирования/аттачирования использовать allDepths (только не забывай прибавлять к нему 1). То есть
К примеру
allDepths++
duplicateMovieClip("button", "button"+i, allDepths);
setProperty("button"+i, _x, нужный x);
setProperty("button"+i, _y, нужный y);
и
allDepths++
attachMovie("mini", "mini"+i1, allDepths);
Таким образом избежишь ошибок....:)
Ну а с остальным я не разобрался - уж извини, лень. Тем более что надо смотреть все сразу, вместе с исходником, или переделывать нафиг весь код.... Попробуй с тем, что я сказал, может, заработает? Или пиши конкретнее, разбей код на участки, тестируй - а то так сложно понять, что там за проблемы.
Ну одну ошибку сразу вижу...
attachMovie("button", "button"+i, i);
attachMovie("mini", "mini"+i1, i1)
i и i1 от 0 до кагого то значения
depth'ы у тебя получаются одинаковыми....а они должны быть разными (уникальными)
Стоп, господа. Я так печатать не успею. dekud прав - поскольку создание происходит в цикле, то depth'ы должны различаться, например, во втором случае лучше сделать так:
attachMovie("mini", "mini"+i1, i1+50)
Что бы упростить код предлагаю свойства объектам передавать при создании:
_root.attachMovie("button", "button"+i, i,{_x:osx[i],_y:osy[i]});
Во-первых, лучше дублируй клип, так как, если я не ошибаюсь, при attach-е не все вложенные в attach-ируемый клип объекты тоже дублируются
artfla$her, ошибаешься. Дублируется все.
Я лично тоже считаю, что ни к чему плодить на сцене лишние объекты-пустышки, которые нужны только для дублирования.
А функцию setProperty() вообще забудь как страшный - это было в пятом флэше, а на дворе - MX2004.
2rojok-online. Похоже, что вся твоя проблема - в дублировании depth'ов.
Да и еще, имхо with в последнем цикле - не к месту.
_root.attachMovie("button", "button"+i, i,{_xsx[i],_ysy[i]});
Прикольно он строку отконвертил :D :D
_root.attachMovie("button", "button"+i, i,{_x:sx[i],_y:sy[i]});
Вот блин, с третьей попытки. Впредь буду пользоваться предпросмотром :)
artfla$her
12.04.2004, 01:52
Dindin, интересный способ задания свойств.... Не знал... Я вообще 2004-ый плохо знаю. Раньше такого не было. Спасибо.
artfla$her
12.04.2004, 01:56
А насчет дублирования.... Я говорил про attach, так там у меня лично почему-то при аттаче создавался лишь внешний клип, а все вложенные в него игнорировались. Черт знает почему. Может, объяснишь, как можно сделать полный attach? Или я чего-то неправильно делаю... :)
Пришли исходник - посмотрим :)
Да, кстати, задание свойств при инициализации еще в MX было.
artfla$her
12.04.2004, 02:19
Нет исходника.... :) Просто встречался с этим, когда делал игру Puzzle, с загружаемыой картинкой. Например, писал:
attachMovie("a","a1",10)
в "a" были и другие клипы, но "a1" их не содержал. :(
Да забей, duplicateMovieClip круче....
А в MX не знал..... Увы. Еще раз спасибо.
Имхо duplicate и attach - для разных целей, а поэтому судить что круче - некорректно :) Что адекватнее в том или ином случае - вот вопрос :)
2 artfla$her
ну раз пошла такая пьянка...то
всетаки начиная с MX
корректнее писать
mc.duplicateMovieClip("new_mc",depth);
а свойства можно задавать
this["button"+i]._x = 10;
а насчет attachMovie("a","a1",10)
это были какие-то твои внутренние ошибки... так как даная функция работает вполне адекватно....:)
кстати setProperty - это прежиток даже не 5 а 4:)
2Decud Ненадо путать функцию duplicateMovieClip() и метод MovieClip.duplicateMovieClip () - все таки разные вещи. К вопросу о корректности - Имхо это употрябляется в разных случаях, так что нельзя сказать, что запись типа
duplicateMovieClip("mc","new_mc",depth); некорректна Обращение кобъекту как к элеменнту ассоциированного массива (this["button"+i]._x = 10;) тоже для отдельных случаев канает, а где-то приходиться и eval'ом пользоваться.
:)
rojok-online
12.04.2004, 10:52
Всем большое спасибо! Со 2 вопросом разобрался, а вот с первым нет ( И поэтому выкладываю пример 1 вопроса...
Dindin пожалуйста не говори мне этого страшного слова eval, когда мне дали класс написанный в AS2 и где-то он работал, а где-то нет я долго не мог понять а что за фигня...
но когда я залез в код и увидел там eval я сперва долго и упроно ругался а потом все исправлял к виду mc[name]....
поэтому согласен с УильямБрэдберри
http://www.flasher.ru/tutorial/viewtut.php?id=138
А посему объявляю указ:
Забудьте onClipEvent
Забудьте нафиг "WITH"
Забудьте к чертям EVAL (он оооочень-очень редко нужен)
И не вздумайте вспомнить TELLTARGET
(..готов придушить любого горе-флэшера за эти рудименты =)).)
Все. Точка.
На улице 2003 год и царство MX-а.
:)
if (_root.lastbutton == this._name) {
this.tr.play(); // проблема вроде здесь
} else {
this.tr.gotoAndStop(1);
}
2decud Читай Уила внимательно - он говорит, что без eval() можно обойтись в БОЛЬШИНСТВЕ случаев. Я например использую его что бы присвоить переменной ссылку на динамически созданный объект, Для этого Object[instance] не всегда ппрокатывает:)
2rojok. Лови файло.
rojok-online
12.04.2004, 11:44
dekud
Я знаю что в этом (, но не знаю как исправить (
Dindin
Дык у тя тоже самое что и уменя... Только у тя при нажатии останавливается треугольник, а у меня двигается)
2 Dindin...спор впринципе бесполезный:))...
каждый пишет исходя из тех граблей на котрые наступал... и из того к чему привык.... лично я совершенно спокойно обхожучь без eval....ну а кому-то так удобнее....
rojok-online
тогда еще раз что тебе надо...
если ты хочешь чсобы нажал на кнопку треуголиник стал красным, отпустил снова стал белым тогда вместо все этой конструкции напиши:
this["button"+i].onRollOut = function () {
this.tr.gotoAndStop(1);
};
this["button"+i].onRelease=function (){
this.tr.gotoAndPlay(1);
}
ну и естественно
добавь
this["button"+i].onReleaseOutside = this["button"+i].onRollOut
rojok-online
12.04.2004, 21:51
dekud
ДА все работает кроме того что при нажатии на сначало на кнопку 1, а потом на кнопку и чтоб на кнопки 1 исчезла анимация.... Я понятно ибъяснил в чем у меня проблема?
Если честно не понял фразу....
опиши таким образом
1. Наводим на кнопку - просиходи то-то
2. Убираем мышь происходит то-то
3. Нажимае мышь на кнопке - то-то
4. Отпускаем мышь после нажати -
а - на кнопке
б - вне кнопки
rojok-online
12.04.2004, 22:10
dekud
1. При наведении мыши на кнопку то треугольничек двигается, а при убирании быши снановиться на исходное место - это Работает
2. При нажатии на кнопку треугольничек меняет цвет и постоянно двигается не зависимо от того наведена ли на нём мышь или нет- это Работает
3. При нажатии на кнопку 2, у кнопки 1 прекращалась анимация и треугольничек менял цвет на исходный - не работает
Если не сложно постучи в асю 141486911
rojok-online
12.04.2004, 23:11
:D А!!!!!!!!! Мэн Спасибо!!!!!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.