PDA

Просмотр полной версии : Непонятки с работой addChild в package


umnikus
13.08.2010, 13:41
Всем доброго времени суток.

Проблема следующая.
Для корректной работы проекта требуется отдельный класс, который будет выполнять повторяющиеся операции, которые вызывать нужно из разных мувиклипов. Идея состоит в использовании лишь функций класса, так как неизбежно возникает проблема с обращением в экземплярам, созданных в других мувиках.

Код пакета.

package main{
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.Sprite;

public class Service extends Sprite {
public var myLabels:labels = new labels();
public var myshow:slideshow = new slideshow();
public var newlogo:logo = new logo;
public var myMenu:menu = new menu();


public function slide_show():void
{
addChild(myshow);
}

public function panels_load():void
{
addChild(myMenu);
var TweenX:Tween = new Tween(myMenu, "x", None.easeNone, 1280, 0, 1, true);
var TweenY:Tween = new Tween(myMenu, "y", None.easeNone, 0, 0, 1, true);
}

public function menu_load():void
{
addChild(myLabels);
var TweenX:Tween = new Tween(myLabels, "x", None.easeNone, -1280, 0, 1, true);
var TweenY:Tween = new Tween(myLabels, "y", None.easeNone, 0, 0, 1, true);
}

public function menu_unload():void
{
addChild(myLabels);
var TweenX:Tween = new Tween(myLabels, "x", None.easeNone, 0, -1280, 1, true);
var TweenY:Tween = new Tween(myLabels, "y", None.easeNone, 0, 0, 1, true);
}

public function panels_unload():void
{
addChild(myshow);
var TweenX:Tween = new Tween(myMenu, "x", None.easeNone, 0, 1280, 1, true);
var TweenY:Tween = new Tween(myMenu, "y", None.easeNone, 0, 0, 1, true);
}
}
}

Четыре объявленных экземпляра класса - мувики, созданные в библиотеке. Расширение на Sprite добавлено, все компилируется, на addChild, как на неизвестный метод, не ругается.

В теле первого кадра:

stop();
import main.Service;
var myService:Service = new Service();

myService.slide_show();
myService.panels_load();
myService.menu_load();

myService.newlogo.x=30;
myService.newlogo.y=600;

Никакой анимации не видать. При этом на выходе срабатывают все trace, если их добавить в тело функций из пакета. То есть попросту игнорируются все addChild. Но если их убрать из пакета отсюда и добавить в кадр, как:


stop();
import main.Service;
var myService:Service = new Service();

addChild(myService.myshow);
addChild(myService.myLogo);
addChild(myService.myMenu);
addChild(myService.newlogo);

myService.slide_show();
myService.panels_load();
myService.menu_load();

myService.newlogo.x=30;
myService.newlogo.y=600;

то все сразу начинает прекрасно работать, но, увы, переходить нужно именно к правильной схеме.
Прошу подсказать, где же ошибка или мое непонимание концепций AS3, из-за которых не работает данный вариант. Если я изобретаю велосипед, то прошу подсказать более рациональный способ.
Заранее спасибо.

vinch
13.08.2010, 13:47
Наверное, нужно добавить myService с помощью addChild? Он же Sprite.
Если я все правильно понял.
Ты добавляешь четыре мувика в myService, а его самого никуда не добавляешь - вот и trace работают, но мувиков не видно.
Так:
stop();
import main.Service;
var myService:Service = new Service();
addChild(myService);
.......

umnikus
13.08.2010, 13:51
Голова моя садовая. Точно.
Спасибо Вам большое :)
-----------------------------



Добавлено через 7 часов 29 минут
ДРУЗЬЯ! Промучался весь день, но так и не постиг AS3 через путь обращения к классам.

Плюнул и решил сделать с помощью инстансов. Но вот какая беда.
Программно создаю мувик myMain от созданного в библиотеке main. В этом мувике находится labels (instance:myLabels, всякие кнопки) и panels (instance:myPanels, панельки для красоты). При нажатии на любую кнопку в labels должна происходить анимация labels и panels по уходу с экрана с помощью твинов.

import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.Sprite;

coll_button.addEventListener(MouseEvent.CLICK,goCollection);

function goCollection(e:MouseEvent){


var TweenX:Tween = new Tween((getChildByName("???") as MovieClip);, "x", None.easeNone, 0, 1280, 1, true);
var TweenY:Tween = new Tween((getChildByName("???") as MovieClip);, "y", None.easeNone, 0, 0, 1, true);
}


Но я не знаю, как мне обратиться к ним при такой вложенности из labels, где находятся сами кнопки.

Добавлено через 9 часов 14 минут
Все, разобрался сам :) просто перенес Прослушиватели Событий в мувик постарше и оттуда спускался по иерархии.