PDA

Просмотр полной версии : Шлейф за объектом


vivado
13.03.2013, 18:29
Всем привет,
Пытаюсь сделать шлейф за движущимся объектом (не за мышью - хотя какая разница)
на главной сцене код создающий "детей" объекта с классом shlejf (мувик в библиотеке)

addEventListener(Event.ENTER_FRAME,loop);

function loop(e:Event):void{

var shlejf_obj:shlejf = new shlejf();
this.addChild(shlejf_obj);

shlejf_obj.x=obj.x;
shlejf_obj.y=obj.y;

obj.x+=3;
}


Как мне постепенно удалять ненужные мувики ("детей") из шлейфа

Пробую делать через removeChild, на последнем кадре в shlejf`e пишу

removeChild(DisplayObject(this));

выдает ошибку про нулевой объект, как превозмочь?

MikroAcse
13.03.2013, 18:42
removeChild(DisplayObject(this));
Хм... удалить себя из себя?
Может, так? (если в самом шлейфе)
parent.removeChild(this);
Или так? (если в главном классе)
removeChild(shlejf);
Кстати, переименуй shlejf в plume, ну или в другое английское слово, а то ужас... :)

vivado
13.03.2013, 18:53
Ругается
"Не удается вызвать свойство или метод со ссылкой на объект "null"

MikroAcse
13.03.2013, 18:56
"Не удается вызвать свойство или метод со ссылкой на объект "null"
На какое свойство ругается?

vivado
13.03.2013, 18:57
на последний кадр в объекте shlejf на котором "parent.removeChild(this);"

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at shlejf/frame40()

strangedk
13.03.2013, 19:23
на последний кадр в объекте shlejf на котором "parent.removeChild(this);"
Если код уж в кадрах, то он должен быть в одном кадре.
Код из одного кадра не знает что происходит с кодом из другого кадра.

in4core
14.03.2013, 04:10
Код из одного кадра не знает что происходит с кодом из другого кадра. Не совсем так.
Если вы в первом кадре напишите var a:int = 5; а в 5 кадре сделаете trace(5) то получите 5 - без вариантов :) Там немного своя система, еще до конца не изученная на 100%. Например, если маска сделанная в IDE динамическая, то есть с каждым кадром меняется, то некоторые действия кода - могут отменяться при наступлении след кадра. Сейчас на пальцах это объяснить сложно - но проблема существует и оч болшая

PainKiller
14.03.2013, 10:53
плюс к вышесказанному, прежде чем использовать строчку

parent.removeChild(this);

я бы еще проверил чему равен parent

vivado
14.03.2013, 11:08
плюс к вышесказанному, прежде чем использовать строчку

parent.removeChild(this);

я бы еще проверил чему равен parent

вывел парент через трейс - [object MainTimeline]

На AS2 делал так:
Добавлял на сцену дубликат MovieClip, а потом строчкой в самом клипе
удалял его parent.removeMovieClip(this);
а с addChild это не прокатывает

Блин вроде бы простейшая задача - а не все так просто оказалось )))

Zebestov
14.03.2013, 12:07
Если вы ... в 5 кадре сделаете trace(5) то получите 5 - без вариантов
Внезапно.

vivado
14.03.2013, 12:23
Так что делать то, как реализовать?

Есть конечно вариант - делать анимацию добавленных мувиков в прозрачность (типа исчезновение).
Но ониж будут оставаться на сцене + память хавать.
Можно еще их через определенное время все через цикл с главной сцены стирать - но блин что проще никак нельзя?

Zebestov
14.03.2013, 12:31
Так что делать то, как реализовать?
Уже ответили.
if (parent) parent.removeChild(this);
Если не работает, ищи ошибку в другом месте кода.

vivado
14.03.2013, 12:35
ДА!!!

Спасибо всем большое.

in4core
14.03.2013, 14:28
Внезапно. Черт опечатка trace(a) - но получилось смешно)))