PDA

Просмотр полной версии : выгрузить swf из него самого


Denis37
11.05.2013, 15:39
Помогите закрыть рюкзак из потомка.

код родителя:

//Открываю рюкзак.
btnRukOn.addEventListener(MouseEvent.CLICK,onRuk);

var rukUrl:URLRequest = new URLRequest("rukzak.swf");
var rukLoad:Loader = new Loader();

function onRuk(e:MouseEvent):void
{
rukLoad.load(rukUrl);
addChild(rukLoad);
}

// Закрываю рюкзак.
btnRukOff.addEventListener(MouseEvent.CLICK, offRuk);

function offRuk(e:Event):void
{
rukLoad.unload();
}


Тут все работает. А вот сделав кнопку в самом рюкзаке, не могу его закрыть.
Код потомка:

btn_close.addEventListener(MouseEvent.CLICK, offRuk);

function offRuk(e:MouseEvent):void
{
parent.offRuk();
}

Что написать то в рюкзаке надо, чтобы функцию родителя вызвать?

in4core
11.05.2013, 16:14
Написано все верно, возможно parent - Не есть родитель, а какой то контейнер. Проверьте на соотвествеие через is

Denis37
11.05.2013, 16:16
А как?)) Да он и компилироваться так не хочет.

Wolsh
11.05.2013, 17:32
возможно parent - Не есть родительНу Loader же. Откуда у него метод offRuk()?
Да он и компилироваться так не хочет.Потому что у класса DisplayObjectContainer тоже нет метода offRuk().

caseyryan
11.05.2013, 20:52
В классах надо такие вещи писать. Гораздо проще все будет.

silin
11.05.2013, 21:50
если не смущает такой абсолютно мутный шаманский путь, то в рюкзаке надо написать
btn_close.addEventListener(MouseEvent.CLICK, offRuk);
function offRuk(e:MouseEvent):void
{
parent.parent["offRuk"](null);
}

Denis37
11.05.2013, 22:44
В классах надо такие вещи писать. Гораздо проще все будет.

В классы я еще не вникал. Знаю что там у них есть приватные , публичные функции. Надо в ООП вникать...

если не смущает такой абсолютно мутный шаманский путь, то в рюкзаке надо написать

parent.parent["offRuk"](null);



Не знаю что за строчка... Но помогло,спасибо!
Тупо скопировать и радоваться мне не интересно.)) Если не затруднит обьясните, почему parent 2 раза? Почему offRuk в каких то скобках квадратных и кавычках и что за null в конце? Что все это значит?
Я новичек во flash и AS3. Второй не изучал.

silin
11.05.2013, 23:18
1)parent 2 раза из за того, что загруженный мувик находится в лоадере, т.е. первый - это лоадер, а второй основной таймлайн
2)обращение к offRuk через строку в скобках (динамический доступ), чтоб компилятор не смущать, об этом уже сказали: у parent (DisplayObjectContainer) нет метода offRuk()
3)null в аргументах - потому, что function offRuk(e:Event) ждет один аргумент

Добавлено через 14 минут
такие вот "фокусы" это вообще-то пережитки самых ранних версии AS: весь код "на борту" мувиков, взаимодействие через parent - короче, жуть и шаманство.., что-то чуть посерьезнее баннера превращается в ацкую шараду

AS3 позволяет этот бред нормально структурировать, о чем комрады выше у же сказали

Denis37
11.05.2013, 23:45
Мда с MoiveClip-ами все проше. Но не хочеться основную флешку напрягать. Лучше сделать все отдельно, или я зря так думаю?

1)parent 2 раза из за того, что загруженный мувик находится в лоадере, т.е. первый - это лоадер, а второй основной таймлайн
2)обращение к offRuk через строку в скобках (динамический доступ), чтоб компилятор не смущать, об этом уже сказали: у parent (DisplayObjectContainer) нет метода offRuk()
3)null в аргументах - потому, что function offRuk(e:Event) ждет один аргумент

Добавлено через 14 минут
такие вот "фокусы" это вообще-то пережитки самых ранних версии AS: весь код "на борту" мувиков, взаимодействие через parent - короче, жуть и шаманство.., что-то чуть посерьезнее баннера превращается в ацкую шараду

AS3 позволяет этот бред нормально структурировать, о чем комрады выше у же сказали

С первым пунктом мне все понятно, остальное тма тьмущая. Ладно будем разбираться. Дойдет.. если не сразу то со временем. Всем спасибо кто помог. и ответил.

silin
12.05.2013, 00:09
>> Но не хочеться основную флешку напрягать. Лучше сделать все отдельно, или я зря так думаю?
тут такое дело: даже если в этом случае что-то проще сделать 'прямо по месту' что-ли, то это все равно не будет твоим стилем программирования, думаю
поэтому выбор такой: сделать абы работало или разобраться с основами и делать так, чтобы компилятор был уверен, что это будет работать, ведь ругается он не из вредности, а из-за того что написано неправильно/неоднозначно/криво
можно и обмануть его типа parent["offRuk"], но когда при каких-то внешних изменениях это перестанет работать, то искать из-за чего оно придется вслепую и долго, все это в той же мере относится и коду в кадрах