Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как очистить содержимое экрана? (http://www.flasher.ru/forum/showthread.php?t=127062)

twix1124 04.07.2009 00:26

Как очистить содержимое экрана?
 
Ну или как узнать максимальную или минимальную из глубин (слоёв), который присутствуют сейчас на экране?

Obi 04.07.2009 00:30

Код AS3:

public static function clearContainer(cont:DisplayObjectContainer):void {
  while(cont.numChildren > 0) {
      cont.removeChildAt(0);
  }
}

Способ не самый быстрый, но самый удобный для написания =)

twix1124 04.07.2009 01:09

Спасибо) Завтра в Нижний поеду =) Поступать )

Obi 04.07.2009 01:16

Цитата:

Сообщение от twix1124 (Сообщение 833051)
Спасибо) Завтра в Нижний поеду =) Поступать )

Успехов!

kackbip 04.07.2009 08:55

Цитата:

Способ не самый быстрый
А какой самый быстрый?

udaaff 04.07.2009 14:00

Удалить родителя.

Psycho Tiger 04.07.2009 18:40

Визуальный результат одинаковый, но структуры сохраняться/изменятся.
Кстати, условие "больше" там лишнее.
Код AS3:

while (numChildren) removeChildAt(0);


Obi 05.07.2009 14:45

Цитата:

Сообщение от Psycho Tiger (Сообщение 833127)
Кстати, условие "больше" там лишнее.
Код AS3:

while (numChildren) removeChildAt(0);


Ну это, знаете ли, спорный момент. Строго говоря, пятерка — число, а не булево значение, потому логически, пятерка правдой быть не может.
Код AS1/AS2:

trace(5 == true) // false;

Ну и плюс читабельность повышается.

udaaff 05.07.2009 22:52

Psycho Tiger, лишнее, не лишнее, зависит от стиля написания кода. Я считаю, что оно тут совсем не лишнее.

wvxvw 05.07.2009 23:15

Лишнее.
Что бы вы ни писали внутри if / while и т.п. приводится к Boolean. Поэтому сравнение с true, нулем и т.п. операции имеют смысл только если вы работаете с нетипизироваными объектами - но это, сами понимаете, уже само по себе плохо. К стилю абсолютно никакого отношения не имеет, просто плохо написаный код.

udaaff 06.07.2009 02:05

Имеет отношение к стилю. Это мое мнение.
Я считаю, что если переменная имеет "числовой" тип, то нужно явно показывать это в условии. Мне так больше нравиться, и кажется более логичным, уж почему не знаю.

AL.exe 06.07.2009 11:05

Цитата:

Сообщение от Obi (Сообщение 833236)
Ну это, знаете ли, спорный момент. Строго говоря, пятерка — число, а не булево значение, потому логически, пятерка правдой быть не может.
Код AS1/AS2:

trace(5 == true) // false;

Ну и плюс читабельность повышается.


Вы бы еще со стрингом сравнивали.

Код AS3:

trace(Boolean(5) == true ) //true
trace(Boolean(0) == false) //true


Obi 06.07.2009 12:19

Цитата:

Сообщение от AL.exe (Сообщение 833394)
Вы бы еще со стрингом сравнивали.

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

Ну и кстати ничего не мешает string привести к правде. Просто это плохо.

wvxvw 06.07.2009 12:28

Не имеет отношения это к стилю - это просто непонимание работы програмы... если вы не понимаете, что if () уже конвертирует выражение в булевое значение - это значит, что вы просто не умеете использовать эту конструкцию / используете ее не по назначению. Кроме того, флешевый компилятор не на столько сообразительный, чтобы за вами такую чушь исправлять - если напишете сравнение, то в исполняемом коде получите сравнение + конвертацию вместо просто конвертации.

Цитата:

Сообщение от Obi (Сообщение 833404)
Ага, а то, что вы пятерку пытаетесь привести к булеву значению — это конечно нормально, продолжайте.

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

udaaff 06.07.2009 12:41

Конечно я этого не понимаю, это только ты понимаешь. Свой код можно оформлять по разному, если ты этого не понимаешь, то я тебе сочувствую.

wvxvw 06.07.2009 12:48

Еще раз... это не оформление, твой код:
Код AS3:

if (a != 0)

и мой код:
Код AS3:

if (a)

компилируются в разный байткод и не взаимозаменимы - о каком оформлении речь?

udaaff 06.07.2009 12:49

Если для тебя мое мнение ничего не значит, почитай соглашения по написанию тогда, хотя-бы: http://opensource.adobe.com/wiki/dis...ng+Conventions с примерами оформления. Обрати внимание на раздел Coercion.
Я не говорю, что это так и должно быть, как кому нравиться, тот так и пишет.

wvxvw 06.07.2009 12:52

Не поверишь, я их читал...
Цитата:

Coercion

Don't compare a Boolean value to true or false; it already is one or the other.

Do this:

if (flag)

Not this:

if (flag == true)

А вот ты похоже, не читал ;)

udaaff 06.07.2009 12:53

Речь идет не о Boolean!!

Obi 06.07.2009 13:05

Цитата:

Сообщение от wvxvw (Сообщение 833406)
А вот так чтобы мануал открыть перед тем как глупости писать? Все простые типы спокойно конвертируются из одного в другой.

Причем тут мануал? Я прекрасно знаю, что конвертируются, но это не значит, что не нужно указывать явно. Это вопрос читабельности. В классе из 1000 строк с вашими
Код AS1/AS2:

if(a) while(b) c ? d : e

будет неразбериха. Гораздо понятнее будет написать
Код AS1/AS2:

if(a != undefined) {
  while(b > 0) {

Так можно и к 'hello world' прибавить 17, и все знают, что 17 сконвертируется в строку. Просто логично это явно указать, поскольку число к строке прибавить нельзя.

И да, простые типы тут совсем не в тему.
Код AS3:

var tf:TextField = new TextField();
trace(Boolean(tf)) // true

Вот вам и текстфилд стал правдой.

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

iNils 06.07.2009 13:20

Писать надо так, чтобы условие трактовалось однозначно. Написание if (переменная) не будет трактоваться однозначно.
Если пример будет разбирать другой программист, то у него возник вопрос, что подразумевалось под этой записью. Что переменная имеет значение? Или что оно не должна быть равным нулю? Или и то и другое?

kackbip 06.07.2009 13:34

Вообще-то многое делается в угоду понятности и ошибкоустойчивости.
Возможно и имеет смысл иногда написать while(numChildren>0) вместо while(numChildren).

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

апд: Если бы инилс написал свое сообщение чуть раньше...

wvxvw 06.07.2009 13:41

Цитата:

Сообщение от Obi (Сообщение 833419)
будет неразбериха. Гораздо понятнее будет написать
Код AS1/AS2:

if(a != undefined) {
  while(b > 0) {

Так можно и к 'hello world' прибавить 17, и все знают, что 17 сконвертируется в строку. Просто логично это явно указать, поскольку число к строке прибавить нельзя.

И да, простые типы тут совсем не в тему.
Код AS3:

var tf:TextField = new TextField();
trace(Boolean(tf)) // true

Вот вам и текстфилд стал правдой.

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

Если у вас в коде есть сравнения с undefined - у вас просто плохо написаный код. Переменная может быть undefined только если ее тип задан как var foo:*. Что, как уже говорилось, само по себе плохо. Я не говорю, что всегда писал / пишу хорошо, но за последние 2 года мне ни разу не пришлось сравнивать переменную с undefined в моем коде.

Простые типы как раз таки в тему, потому что вы конвертируете в Boolean, а он - простой тип. И пятерка и TextField могут быть правдой, вы сами только что это написали... мало того, что вы спорите с очевидным, так еще и с самим собой...

Цитата:

Сообщение от iNils (Сообщение 833423)
Писать надо так, чтобы условие трактовалось однозначно. Написание if (переменная) не будет трактоваться однозначно.
Если пример будет разбирать другой программист, то у него возник вопрос, что подразумевалось под этой записью. Что переменная имеет значение? Или что оно не должна быть равным нулю? Или и то и другое?

Причина не в однозначности, а в том, что это не элемент оформления кода, код будет выполнятся по-разному в обоих случаях.
Т.е. пример разного форматирования:
Код AS3:

if (            a           ) a++;

и
Код AS3:

if(a)
{
    a++;
}

оба примера идентичны, разница только в форматировании.

Код AS3:

if (a < 0) a++;

и
Код AS3:

if (a) a++;

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

ЗЫ. Особенно касательно переменных типа Number, int, uint - они не могут быть undefined ни при каких раскладах, максимум NaN для Number - поэтому ремарка не особо в кассу...

AL.exe 07.07.2009 00:22

Цитата:

Сообщение от Obi (Сообщение 833404)
Ага, а то, что вы пятерку пытаетесь привести к булеву значению — это конечно нормально, продолжайте.

Еще раз внимательно посмотрите на приведенный мной код. Я не пытаюсь, а успешно привожу. Чего и Вам желаю.

Пустой стринг тоже вполне удачно приводится к false, к слову.

iNils 07.07.2009 01:00

Цитата:

Причина не в однозначности, а в том, что это не элемент оформления кода, код будет выполнятся по-разному в обоих случаях.
Я ни слова об оформлении не сказал.

grizzly 07.07.2009 01:59

http://opensource.adobe.com/wiki/dis...-LanguageUsage

Код:

Do this:
if (flag)

Not this:
if (flag == true)

Код:

Explicitly coerce an int, uint, Number or String to a Boolean:

Do this:
if (n != 0)

Not this:
if (n)

сам адоб думаю веский аргумент

BlooDHounD 07.07.2009 02:27

grizzly, адоб в данном случаи не аргумент. увы. то что с ними иногда мнение совпадает, это ничего не значит.

AL.exe 07.07.2009 02:42

Я, если честно, вообще не вижу предмета спора.


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

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