Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   visible.flase/true - А что происходит на самом деле? (http://www.flasher.ru/forum/showthread.php?t=136964)

Stanislavsky 01.03.2010 18:55

visible.flase/true - А что происходит на самом деле?
 
Привет!
Подскажите, можно ли так "схалтурить"?
Есть клип. В нем addChild несколько других Мувиков. Я хочу узнать, а что будет если я добавлю их все в конструкторе на сцену, а потом, буду visible.false/true менять от функции к функции, с условием != null.
Чувствую, что есть подвох)
1. В чем проблема?
2. В случае с сайтом - пользователь заметит?
3. Как избежать (если можно)?
4. Как правильно?
5. Спасибо!

ratin 01.03.2010 23:52

Если будете менять visible до того, как добавить movieClip на сцену, то никто ничего не увидит.

Stanislavsky 02.03.2010 00:08

Цитата:

Сообщение от ratin (Сообщение 890254)
Если будете менять visible до того, как добавить movieClip на сцену, то никто ничего не увидит.


"До того" - раньше в коде? или раньше в другой функции?

Zebestov 02.03.2010 01:24

раньше по времени выполнения

chabapok 02.03.2010 02:02

Цитата:

а потом, буду visible.false/true менять от функции к функции, с условием != null
В случае с сайтом, если у пользователя дебаг версия плеера, то он не только заметит, а и будет мечтать убить того, кто это сделал. Чтобы все было хорошо надо в try{}catch(){} оборачивать места, где потенциально может выполнится что-то вроде
null.visible = true;

Stanislavsky 02.03.2010 02:50

Спасибо.
Буду разбираться с try и catch...

А можно ли как-то убрать все обекты которые были загружены?
При загрузке функции, все объекты со сцены удаляются, и добавляются только нужные???

gloomyBrain 02.03.2010 03:07

Цитата:

А можно ли как-то убрать все обекты которые были загружены?
Код AS3:

while(container.numChildren) {
container.removeChildAt(0);
}


Stanislavsky 02.03.2010 03:23

Цитата:

Сообщение от gloomyBrain (Сообщение 890274)
Код AS3:

while(container.numChildren) {
container.removeChildAt(0);
}


а можно в двух словах, как этим пользоваться?
Я вставил в начало функции, так ошибка
1119 Оператор Delete не поддерживается операндом типа %1.

gloomyBrain 02.03.2010 03:31

Цитата:

Оператор Delete не поддерживается операндом типа %1.
И причем тут приведенный код?
container - то, из чего удаляем
что еще объяснить - я не знаю =)

Stanislavsky 02.03.2010 03:48

Я пытаюсь сделать следующее: При загрузке этой функции во второй раз, удалить объект textDe который загружен addChild в функциии pageFirma. (Вернуться в меню т.с.)
Код AS3:

private function pageHome(event:Event=null):void
        {
 
                startMenu = new mc_Menu();
                startMenu.x = 0;
                startMenu.y = 120;
                addChild(startMenu); // Добавляем меню и картинку
 
                var but01:MovieClip = startMenu.getChildByName('btn_01') as MovieClip; // Присвоим переменным имена кнопок
                var but02:MovieClip = startMenu.getChildByName('btn_02') as MovieClip;
                var but03:MovieClip = startMenu.getChildByName('btn_03') as MovieClip;
                var but04:MovieClip = startMenu.getChildByName('btn_04') as MovieClip;
 
                but01.addEventListener(MouseEvent.CLICK, pageFirma); //Слушатели для кнопок меню
                but02.addEventListener(MouseEvent.CLICK, pageProjects);
                but03.addEventListener(MouseEvent.CLICK, pageLeistung);
                but04.addEventListener(MouseEvent.CLICK, pageSend);
 
                TransitionManager.start(startMenu, {type:Fade, direction:Transition.IN, duration:3, easing:Strong.easeOut}); //планое появление элементов
 
                if (textDe != null)
                {
                        textDe.visible = false;
                }
                if (contForm != null)
                {
                        contForm,visible = false;
                }
}

Можно ли избавиться от всех этих visible = false с помощью Вашего кода?

gloomyBrain 02.03.2010 04:17

Нет. С помощью моего кода их можно удалить все из контейнера.
А почему бы вам не написать в классе mc_Menu вот такой код в конструкторе:
Код AS3:

this.but01 = this.getChildByName('btn_01') as MovieClip;

Ну объявив все необходимые свойства перед этим. И тогда гораздо удобнее обращаться к кнопкам: startMenu.but01...
А про visible - не вижу причин от них избавляться. Или Вы что-то недоговариваете =)

KIVagant 02.03.2010 06:30

Stanislavsky, у вас ошибка: "contForm,visible = false;" - запятая, вместо точки.
gloomyBrain привел общий пример, где container - это stage, содержащий те объекты, которые Вам нужно удалить. Т.е., например:
Код AS3:

var aaa:Sprite() = new Sprite();
var bbb:Sprite();
for(var i=0; i<=6; i++)
{
bbb = new Sprite();
aaa.addChild(bbb); // Клепашим кучу объектов
}
// А теперь их всех удалим
while(aaa.numChildren) {
aaa.removeChildAt(0);
}


Psycho Tiger 02.03.2010 20:43

Цитата:

Чтобы все было хорошо надо в try{}catch(){} оборачивать места, где потенциально может выполнится что-то вроде
null.visible = true;
Боже упаси так делать.

Stanislavsky 02.03.2010 23:13

Подскажите, если я добавляю объект на сцену в конструкторе. Ставлю его "невидимым". Выполняю функцию и там он снова стоит "невидимый" - нужно ли обязательно писать условие
Код AS3:

if (mc1 != null)
{
mc1.visible = false;
}

вроде бы пока работает без...

chabapok 03.03.2010 04:30

Цитата:

Сообщение от Psycho Tiger (Сообщение 890431)
Боже упаси так делать.

ээ. Ну допустим. Но когда идут такие заявления неплохо бы еще и объяснять - почему?

Psycho Tiger 03.03.2010 20:41

try catch чертовски медленный, но это не главное.
Главное, что если программа швиряет эксепшн - значит что то пошло явно не так. В метод в качестве аргумента передали вместо ссылки на мувиклип null - ошибка логики программы - и об этом никто ничего не узнает, а что это может натворить - вообще неизвестно. Ладно если это просто изменение свойства клипа, который удалили - а если в эту "часть" попадёт ещё какой-нибудь метод/оператор? Схалтурили, чтобы не писать в одном методе 40 try catch - весь метод обернули? Метод крашится и об этом никто не узнает.
Да даже если вы идеальный программист, который никогда не допустит логическую ошибку и вам просто лень делать проверки - пожалейте процессор.

dimarik 03.03.2010 23:22

Цитата:

Сообщение от Stanislavsky (Сообщение 890195)
Привет!
Есть клип. В нем addChild несколько других Мувиков.

Цитата:

Сообщение от chabapok (Сообщение 890268)
Чтобы все было хорошо надо в try{}catch(){} оборачивать места, где потенциально может выполнится что-то вроде
null.visible = true;

Товарисчь, объясните людям, как тут можно получить null?

Stanislavsky 04.03.2010 03:47

Всем спасибо. Все работает.
Кстати - у меня оказывается были ошибки из-за НЕКОРРЕКТНЫХ ИМЕН. Сейчас проявляю бóльшую фантазию.
Надеюсь, что в Клипы, из библиотеки основного Мувика - получится вставлять внешние файлы(картинки) с помощью xml.??
Сейчас встает вопрос о Прелоадере. Я так понимаю - есть два вида: встроенный в мувик и внешний. Какой, в моем случае, актуальнее? Флеха весит 698.579 Bytes. Просто хотелось бы, чтоб прелоадер реагировал, например, на ту же самую страницу с фотками.

dimarik 04.03.2010 04:22

Не, лучше пока больше сюда ничего не пишите, а займитесь изучением предмета. Пошукайте по здешнему форуму, загуглите того-сего понемногу, окунитись в романтику Мука. Колина Мука. Этот автор умеет донести недонестимое.

А сейчас видно, как каша лезет из вашей головы.


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

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