Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   вытащить, убрать мувиклип нажатием кнопки (http://www.flasher.ru/forum/showthread.php?t=116128)

Илья hatha 21.09.2008 11:26

вытащить, убрать мувиклип нажатием кнопки
 
странно, что такая простая и нужная вещь встречается так редко.
не могу найти...помогите —


нажатием на кнопку вытаскиваем мувиклип, вторым нажатием на ту же кнопку - убираем мувиклип.


я думал, что такой код на кнопке должен вытаскивать мувиклип "asd"
а ничего не происходит...

Код:

on (release) {
        attachMovie("asd", {_x: 10, _y: 10});
}


Wolsh 21.09.2008 11:33

Вообщето у метода attachMovie() два обязательных параметра, а Вы передаете только один.
-------------------
UPD: Сорри, их три.

Илья hatha 21.09.2008 11:43

какие это два обязательных параметра бодхисаттва?

Код:

name_batton.onPress = attachMovie("asd"{_x: 10, _y: 10});
так?

Wolsh 21.09.2008 13:00

Вторым параметром должно быть имя для нового экземпляра символа asd, "вытащенного" на сцену.
Третьим обязательным параметром является глубина, на которую следует поместить экземпляр.
Т.е. например
Код:

on (release) {
attachMovie("asd", "asd_mc", this.getNextHighestDepth(); {_x: 10, _y: 10});
}


iNils 21.09.2008 13:11

Пользователь Илья hatha получает плюс за игнорирование тегов для кода. Также напоминаю, что мультипостинг запрещен, пользуйтесь кнопкой "изменить".

Илья hatha 22.09.2008 09:18

Отлично! Работает!
Теперь дальше —
Код:

on (release) {
unloadMovie("asd_mc");
}

такой код на второй кнопке выгружает мувик. НО только один раз. Если опять его включить, то выключить уже не удастся...

Wolsh 22.09.2008 10:51

А при чем здесь unloadMovie() ? Используйте removeMovieClip()

Илья hatha 22.09.2008 10:57

потясающе!!! Работает!. Я очень долго искал это. Спасибо.

Далее — А сложно сделать, что бы код на кнопке после нажатия на неё менялся?
Вот этот —
Код:

on (release) {
attachMovie("asd","asd_mc",getNextHighestDepth(), {_x: 100, _y: 100});
}

На этот —
Код:

on (release) {
removeMovieClip("asd_mc");
}


lexa2000lexa 22.09.2008 11:43

Код:

on (release) {
if(!this.flag){
attachMovie("asd","asd_mc",getNextHighestDepth(), {_x: 100, _y: 100});
this.flag = true;
}
else{
removeMovieClip("asd_mc");
}
}

вот примерно так.

Илья hatha 22.09.2008 11:55

работает. но только один раз.

Включает, выключает, а второй раз не включает.

Илья hatha 22.09.2008 11:59

Вот так работает —

В первом кадре пишем

Код:

var flag:Boolean = false;
На кнопке пишем

Код:

on (release) {
if (!flag) {
 attachMovie("asd","asd_mc",getNextHighestDepth(),{_x:100, _y:100});
 flag = true;
} else {
 removeMovieClip(asd_mc);
 flag = false;
}
}


lexa2000lexa 22.09.2008 12:12

на самом деле отучите себя писать на клипах и на кнопках.

Илья hatha 22.09.2008 12:35

Есть проблемы опять же..

Если одна такая кнопка работает корректно, то две работают только по очереди.
При включении разными кнопками разных мувиков, начинаются глюки:
включение второй раз, невозможность выключить.

А если надо кнопкой свет включить свет, другой телек включить, следующей кнопкой закрыть окно и так далее — перебирать мувики отдельно включающиеся и выключающиеся?

Илья hatha 22.09.2008 12:37

Цитата:

Сообщение от lexa2000lexa (Сообщение 765493)
на самом деле отучите себя писать на клипах и на кнопках.

я бы с радостью, но пока по другому не получается. учту совет на будущее

lexa2000lexa 22.09.2008 12:41

вот по этому стоит писать так
Код:

ваша кнопка.onRelease = function  (){
        if (!this.flag) {
        attachMovie("asd","asd_mc",getNextHighestDepth(),{_x:100, _y:100});
        this.flag = true;
        }
                else {
                removeMovieClip(asd_mc);
                this.flag = false;
                }
}

это нужно писать на кадре.

Илья hatha 22.09.2008 13:08

Работает! Отлично, без глюков.
А если несколько мувиков одновременно? То вот так? —

Код:

ваша кнопка.onRelease = function  (){
        if (!this.flag) {
        attachMovie("asd","asd_mc",getNextHighestDepth(),{_x:100, _y:100});
          attachMovie("asd2","asd2_mc",getNextHighestDepth(),{_x:100, _y:100});
          attachMovie("asd3","asd3_mc",getNextHighestDepth(),{_x:100, _y:100});
        this.flag = true;
        }
                else {
                removeMovieClip(asd_mc);
                removeMovieClip(asd2_mc);
                removeMovieClip(asd3_mc);
                this.flag = false;
                }
}


lexa2000lexa 22.09.2008 13:41

а если нужно много мувиков то можно вот так
Код:

var kol:Number = 20
ваша кнопка.onRelease = function  (){
        for(var i:Number = 1; i<kol;i++){
                trace(i)
                if (!this.flag) {
                        attachMovie("asd"+i,"asd"+i+"_mc",getNextHighestDepth(),{_x:100*i, _y:100});
                        if(i==kol){
                                this.flag = true;
                        }
                }
                        else {
                        removeMovieClip(this._parent["asd"+i+"_mc"]);
                        if(i==kol){
                                this.flag = false;
                        }
                        }
        }
}


Илья hatha 22.09.2008 14:52

я так понял это умножение одного мувика.

а надо несколько разных
к примеру asd1, asd2, asd3.

lexa2000lexa 22.09.2008 14:59

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

NoCD 22.09.2008 16:19

Код:


var number:Number=0
var number2:Number=0
for(i=0;i<=10;i++)
{for(j=0;j<=10;j++)
{number++
name="button"+number
_root["btn_on"+number]=1
attachMovie("button",name,_root.getNextHighestDepth())
_root[name]._x=30*i+30
_root[name]._y=30*j+30
buttons(_root[name],number)
}}

for(i2=0;i2<=10;i2++)
{for(j2=0;j2<=10;j2++)
{number2++
name2="lamp"+number2
attachMovie("lamp",name2,_root.getNextHighestDepth())
_root[name2]._x=30*i2+400
_root[name2]._y=30*j2+45
_root[name2].gotoAndStop(1)
        }}
       
function buttons(ind,step_ind)
{ind.onPress=function()
{name3="lamp"+step_ind
_root["btn_on"+step_ind]++
if(_root["btn_on"+step_ind]==3)
{_root["btn_on"+step_ind]=1}
_root[name3].gotoAndStop(_root["btn_on"+step_ind])
}}

button - мувик
lamp - мувик

Илья hatha 22.09.2008 17:35

Вложений: 1
Что бы сделать такую простую операцию нужен такой сложный код?
Вобще ничего не понятно.


Смотрите как всё просто и ясно в этом прикреплённом файле...
нехватает только кнопки, которая вытаскивала бы и прятала сразу 2-3 мувика.


Хотя простота только видимая.. кнопки сделаны непонятным способом — они не редактируются.

lexa2000lexa 22.09.2008 18:01

ну раз вы не хотите делать как правильно, делайте так как получаеться.

NoCD 22.09.2008 21:12

Да, код длиноват, но это для наглядности, что откуда берется.
В твоем примере там просто весь код в кнопках.
А у меня чистым кодом представлено.
По длине кода аналагично с выложенным примером.

Только у меня чуть другой смысл.
Коментировать не хочу.
Все переменные без ссылок, поэтому не читабельно смотрится

Илья hatha 23.09.2008 10:04

Ещё небольшой вопрос: как изменить глубину?

Код:

getNextHighestDepth(что тут писать?)

lexa2000lexa 23.09.2008 11:18

Там не чего не нужно писан это функция берет следующию положительную пустую глубину.

Илья hatha 23.09.2008 11:21

Вложений: 1
вот что в итоге получилось.
Можно посмотреть на этой страничке —
http://kalinen.nm.ru/umndomforweb.html
или в присоединённом архиве.

Я решил отказаться писать на кнопках и всё написал в кадре. Плавное появление сделал в каждом появляющемся мувике обычным твином и стопом в конце.
Непонятно только, как бы сделать плавное исчезновение при срабатыватии кода «removeMovieClip»

lexa2000lexa 23.09.2008 11:27

Цитата:

Сообщение от Илья hatha (Сообщение 765705)
Непонятно только, как бы сделать плавное исчезновение при срабатыватии кода «removeMovieClip»

Код:

onEnterFrame = function(){
        if(ваш клип._currentframe!=1){
                ваш клип.prevFrame();
        }
        else{
                removeMovieClip(ваш клип)
                delete onEnterFrame;
                }
}

как вариан можно вот так.

Илья hatha 23.09.2008 11:38

а куда это вписать?
вот код кнопки —
Код:

svetbutton.onRelease = function  (){
        if (!this.flag) {
        attachMovie("svet","svet_mc",getNextHighestDepth(),{_x:121, _y:148});
        this.flag = true;
        }
                else {
                removeMovieClip(svet_mc);
                this.flag = false;
                }
}


lexa2000lexa 23.09.2008 11:49

ну примерно вот так если не чего не напутал.
Код:

svetbutton.onRelease = function  (){
        if (!this.flag) {
        attachMovie("svet","svet_mc",getNextHighestDepth(),{_x:121, _y:148});
        this.flag = true;
        }
                else {
                  this.flag = false;
                this.onEnterFrame = function(){
                        if(svet_mc._currentframe!=1){
                        svet_mc.prevFrame();
                        }
                        else{
                                removeMovieClip(svet_mc)
                                delete this.onEnterFrame;
                                }
                }
                }
}


Илья hatha 23.09.2008 11:58

Нет, так svet не выключается, что то не так.

lexa2000lexa 23.09.2008 12:27

Вложений: 1
незнаю что у вас не работает вот прикрепил рабочий пример , смотрите.

Илья hatha 24.09.2008 09:02

delete this.onEnterFrame; - а что это значит?

lexa2000lexa 24.09.2008 11:00

удаление обработчика события
Код:

onEnterFrame

Илья hatha 24.09.2008 11:46

Не работало, потому что кнопка была кнопкой а не мувиклипом.
Всё, теперь всё работает. Огромное спасибо.

Илья hatha 24.09.2008 12:01

Код:

relaks.onRelease = function  (){
        if (!this.flag) {
                        removeMovieClip(okno_mc);
                          removeMovieClip(svet_mc);
                        removeMovieClip(stors_mc);
                        removeMovieClip(stors_son_mc);
        attachMovie("svetTorsher","svetTorsher_mc",88,{_x:237, _y:249});
        attachMovie("shtors_relaks","shtors_relaks_mc",4,{_x:195, _y:142});
        attachMovie("tv","tv_mc",89,{_x:404, _y:313});
        this.flag = true;
        }
                else {
                removeMovieClip(shtors_relaks_mc);
                removeMovieClip(tv_mc);
                removeMovieClip(svetTorsher_mc);
                this.flag = false;
                }
}

вот так я загружал сразу несколько мувиков и убирал ненужные, а как мне здесь применить это —
Код:

svetbutton.onRelease = function  (){
        if (!this.flag) {
        attachMovie("tv","tv_mc",9,{_x:121, _y:148});
        this.flag = true;
        }
                else {
                  this.flag = false;
                this.onEnterFrame = function(){
                        if(tv_mc._currentframe!=1){
                        tv_mc.prevFrame();
                        }
                        else{
                                removeMovieClip(tv_mc)
                                delete this.onEnterFrame;
                                }
                }
                }
}


lexa2000lexa 24.09.2008 12:13

А может мне все работу за вас сделать? и потом деньги еще за нее получить?
мне, конечно, не сложно вам сделать, но имейте совесть я вам показал на одном примере, будьте добры доделать, так как вам нужно, если что то конкретно не понятно, то другое дело, а когда так, это уже нужно обращаться в другой раздел "Вакансии".

Илья hatha 24.09.2008 12:25

Да. Извините lexa2000lexa. Что-то я правда насел. Увлёкся.

NoCD 24.09.2008 16:05

прежде чем удалить клип, можно уменьшить альфу через онЕнтерФраме

Илья hatha 24.09.2008 21:52

NoCD, это мне уже подсказал lexa2000lexa. И даже написал как это сделать для одного мувика. Но у меня в некоторых случаях надо убрать два три мувика сразу, и я не знаю как их перечислить в коде. Было бы здорово если бы их можно было перечислить вот так например — if(первый, второй, третий._currentframe!=1){ и так далее

NoCD 25.09.2008 00:21

если нужно сравнить несколько элементов с одним значением, то думаю это может помочь:
Код:

if((первый._currentframe!=1) and (второй._currentframe!=1) and (третий._currentframe!=1))
{...}

или
Код:

if((первый._currentframe!=1) or (второй._currentframe!=1) or (третий._currentframe!=1))
{...}



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

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