PDA

Просмотр полной версии : Как проверить существование символа на ролике?


sidorenkova
07.06.2013, 13:56
Здравствуйте!

AS3 создаёт на ролике элемент методом: addChild();

Но потом нужно удалить элемент removeChild, но у меня есть вопрос, если ли метод, как проверить. существует ли на данный момент Символ в ролике?

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

Добавлено через 7 минут
Можно ли обычным... *.visible == "true" ???

Bletraut
07.06.2013, 14:11
Это же очень просто

var mm:Sprite = new Sprite();
if(mm)
{
trace("Существует");
}
else
{
trace("Не существует");
}

in4core
07.06.2013, 14:14
Bletraut - WOT ?

contains

Final Hope
07.06.2013, 14:18
var mc:MovieClip = new MovieClip();
mc.name = "my_mc";
this.addChild( mc );

//Первый способ проверить:
trace( this.getChildByName( "my_mc" ) );
//Второй способ проверить:
trace( mc.parent == this );
//Третий способ проверить от in4core:
trace( this.contains( mc ) );

Bletraut
07.06.2013, 14:32
Bletraut - WOT ?

contains

Тоже самое что и mm != null

Добавлено через 2 минуты
//Первый способ проверить:
trace( this.getChildByName("my_mc") );
//Второй способ проверить:
trace( mc.parent == this );
//Третий способ проверить от in4core:
trace( this.contains( mc ) );

Извращения же просто, особенно первое и второе.

Final Hope
07.06.2013, 14:37
Bletraut, вопрос был "как узнать, находится ли объект внутри другого объекта", а не узнать, существует ли объект в принципе.

Bletraut
07.06.2013, 14:41
var mm:Sprite = new Sprite();
var bb:Sprite = new Sprite();
bb.addChild(mm);
if(bb.mm)
{
trace("Существует");
}
else
{
trace("Не существует");
}

Тоже самое.

Final Hope
07.06.2013, 14:44
Тоже самое.
Scene 1, Layer 'Layer 1', Frame 1, Line 4 1119: Access of possibly undefined property mm through a reference with static type flash.display:Sprite.
Да ну?

Bletraut
07.06.2013, 14:50
Цитата: Сообщение от Bletraut
Тоже самое.

Цитата: Scene 1, Layer 'Layer 1', Frame 1, Line 4 1119: Access of possibly undefined property mm through a reference with static type flash.display:Sprite.

Да ну?

Пардон, не нужно было if(bb.mm)
{ писать, а просто if(mm)
{, это на тот случай было если mm уже в bb стоит в кадре.

Добавлено через 57 секунд
var mm:Sprite = new Sprite();
var bb:Sprite = new Sprite();
bb.addChild(mm);
if(mm)
{
trace("Существует");
}
else
{
trace("Не существует");
}

вот так все заработает.

KumoKairo
07.06.2013, 15:03
Совсем недавно посоветовали не использовать contains, а проверять родителя мувика через .parent
То есть если имеем:

var spriteContainer:Sprite = new Sprite();
var vasya:Sprite = new Sprite();
spriteContainer.addChild(vasya);
if(vasya.parent == spriteContainer) //Истина
{
trace("Содержит");
}
spriteContainer.removeChild(vasya);
if(vasya.parent == spriteContainer) //Уже ложь
{
trace("Содержит"); //не выведет
}

Спасибо товарищам КорДум и GBee за наводку :)

Final Hope
07.06.2013, 15:13
var mm:Sprite = new Sprite();
var bb:Sprite = new Sprite();
bb.addChild(mm);
if(mm)
{
trace("Существует");
}
else
{
trace("Не существует");
}

вот так все заработает.Bletraut, а вот так работает? :)var mm:Sprite = new Sprite();
var bb:Sprite = new Sprite();
bb.addChild(mm);
bb.removeChild(mm);
if(mm)
{
trace("Существует");
}
else
{
trace("Не существует");
}

MikroAcse
07.06.2013, 18:39
Bletraut
Ты не прав.
Вопрос был: добавлен ли спрайт в другой спрайт?
Ты этот вопрос понял как: существует ли этот спрайт?
И еще раз:
var sprite:Sprite = new Sprite();
if(sprite == null) {
trace("Sprite is null");
}
Никогда, никогда не выведет "Sprite is null".