Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   2 вопроса в одном! (http://www.flasher.ru/forum/showthread.php?t=56910)

rojok-online 11.04.2004 23:36

2 вопроса в одном!
 
Привет!
Вообще голова не соображает.. ((( в чем проблемы :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;
        }
}


(сори если описал вопросы непонятно)

Nucer 12.04.2004 00:39

Сложно разобраться, приколи исходник или напиши подробные коменты

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);
Таким образом избежишь ошибок....:)
Ну а с остальным я не разобрался - уж извини, лень. Тем более что надо смотреть все сразу, вместе с исходником, или переделывать нафиг весь код.... Попробуй с тем, что я сказал, может, заработает? Или пиши конкретнее, разбей код на участки, тестируй - а то так сложно понять, что там за проблемы.

dekud 12.04.2004 00:52

Ну одну ошибку сразу вижу...

attachMovie("button", "button"+i, i);

attachMovie("mini", "mini"+i1, i1)

i и i1 от 0 до кагого то значения

depth'ы у тебя получаются одинаковыми....а они должны быть разными (уникальными)

Dindin 12.04.2004 01:15

Стоп, господа. Я так печатать не успею. 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 в последнем цикле - не к месту.

Dindin 12.04.2004 01:16

Код:

_root.attachMovie("button", "button"+i, i,{_xsx[i],_ysy[i]});
Прикольно он строку отконвертил :D :D

Dindin 12.04.2004 01:18

Код:

_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? Или я чего-то неправильно делаю... :)

Dindin 12.04.2004 02:14

Пришли исходник - посмотрим :)
Да, кстати, задание свойств при инициализации еще в MX было.

artfla$her 12.04.2004 02:19

Нет исходника.... :) Просто встречался с этим, когда делал игру Puzzle, с загружаемыой картинкой. Например, писал:
attachMovie("a","a1",10)
в "a" были и другие клипы, но "a1" их не содержал. :(
Да забей, duplicateMovieClip круче....
А в MX не знал..... Увы. Еще раз спасибо.

Dindin 12.04.2004 03:03

Имхо duplicate и attach - для разных целей, а поэтому судить что круче - некорректно :) Что адекватнее в том или ином случае - вот вопрос :)

dekud 12.04.2004 10:15

2 artfla$her
ну раз пошла такая пьянка...то
всетаки начиная с MX
корректнее писать
mc.duplicateMovieClip("new_mc",depth);

а свойства можно задавать
this["button"+i]._x = 10;

а насчет attachMovie("a","a1",10)

это были какие-то твои внутренние ошибки... так как даная функция работает вполне адекватно....:)

кстати setProperty - это прежиток даже не 5 а 4:)

Dindin 12.04.2004 10:36

2Decud Ненадо путать функцию duplicateMovieClip() и метод MovieClip.duplicateMovieClip () - все таки разные вещи. К вопросу о корректности - Имхо это употрябляется в разных случаях, так что нельзя сказать, что запись типа
duplicateMovieClip("mc","new_mc",depth); некорректна Обращение кобъекту как к элеменнту ассоциированного массива (this["button"+i]._x = 10;) тоже для отдельных случаев канает, а где-то приходиться и eval'ом пользоваться.
:)

rojok-online 12.04.2004 10:52

Вложений: 1
Всем большое спасибо! Со 2 вопросом разобрался, а вот с первым нет ( И поэтому выкладываю пример 1 вопроса...

dekud 12.04.2004 11:07

Dindin пожалуйста не говори мне этого страшного слова eval, когда мне дали класс написанный в AS2 и где-то он работал, а где-то нет я долго не мог понять а что за фигня...
но когда я залез в код и увидел там eval я сперва долго и упроно ругался а потом все исправлял к виду mc[name]....

поэтому согласен с УильямБрэдберри

http://www.flasher.ru/tutorial/viewtut.php?id=138

Цитата:

А посему объявляю указ:
Забудьте onClipEvent
Забудьте нафиг "WITH"
Забудьте к чертям EVAL (он оооочень-очень редко нужен)
И не вздумайте вспомнить TELLTARGET
(..готов придушить любого горе-флэшера за эти рудименты =)).)
Все. Точка.
На улице 2003 год и царство MX-а.

:)

dekud 12.04.2004 11:16

if (_root.lastbutton == this._name) {
this.tr.play(); // проблема вроде здесь
} else {
this.tr.gotoAndStop(1);
}

Dindin 12.04.2004 11:26

Вложений: 1
2decud Читай Уила внимательно - он говорит, что без eval() можно обойтись в БОЛЬШИНСТВЕ случаев. Я например использую его что бы присвоить переменной ссылку на динамически созданный объект, Для этого Object[instance] не всегда ппрокатывает:)

2rojok. Лови файло.

rojok-online 12.04.2004 11:44

dekud
Я знаю что в этом (, но не знаю как исправить (
Dindin
Дык у тя тоже самое что и уменя... Только у тя при нажатии останавливается треугольник, а у меня двигается)

dekud 12.04.2004 11:44

2 Dindin...спор впринципе бесполезный:))...
каждый пишет исходя из тех граблей на котрые наступал... и из того к чему привык.... лично я совершенно спокойно обхожучь без eval....ну а кому-то так удобнее....

dekud 12.04.2004 11:49

rojok-online
тогда еще раз что тебе надо...
если ты хочешь чсобы нажал на кнопку треуголиник стал красным, отпустил снова стал белым тогда вместо все этой конструкции напиши:

Код:

       
                this["button"+i].onRollOut = function () {
               
                this.tr.gotoAndStop(1);
               
        };
       
        this["button"+i].onRelease=function (){
                this.tr.gotoAndPlay(1);
        }


dekud 12.04.2004 11:51

ну и естественно
добавь
Код:

this["button"+i].onReleaseOutside = this["button"+i].onRollOut

rojok-online 12.04.2004 21:51

dekud
ДА все работает кроме того что при нажатии на сначало на кнопку 1, а потом на кнопку и чтоб на кнопки 1 исчезла анимация.... Я понятно ибъяснил в чем у меня проблема?

dekud 12.04.2004 22:01

Если честно не понял фразу....
опиши таким образом
1. Наводим на кнопку - просиходи то-то
2. Убираем мышь происходит то-то
3. Нажимае мышь на кнопке - то-то
4. Отпускаем мышь после нажати -
а - на кнопке
б - вне кнопки

rojok-online 12.04.2004 22:10

dekud

1. При наведении мыши на кнопку то треугольничек двигается, а при убирании быши снановиться на исходное место - это Работает

2. При нажатии на кнопку треугольничек меняет цвет и постоянно двигается не зависимо от того наведена ли на нём мышь или нет- это Работает

3. При нажатии на кнопку 2, у кнопки 1 прекращалась анимация и треугольничек менял цвет на исходный - не работает


Если не сложно постучи в асю 141486911

dekud 12.04.2004 22:57

Вложений: 1
вот посмотри...

rojok-online 12.04.2004 23:11

:D А!!!!!!!!! Мэн Спасибо!!!!!


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

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