Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Непонятки с работой addChild в package (http://www.flasher.ru/forum/showthread.php?t=143324)

umnikus 13.08.2010 13:41

Непонятки с работой addChild в package
 
Всем доброго времени суток.

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

Код пакета.
Код AS3:

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, как на неизвестный метод, не ругается.

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

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. Но если их убрать из пакета отсюда и добавить в кадр, как:

Код AS3:

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 работают, но мувиков не видно.
Так:
Код AS3:

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 по уходу с экрана с помощью твинов.
Код AS3:

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 минут
Все, разобрался сам :) просто перенес Прослушиватели Событий в мувик постарше и оттуда спускался по иерархии.


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

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