ссылочные символы на основной временной шкале - PullRequest
0 голосов
/ 08 апреля 2010

это один из тех непростых основных вопросов, по которым не работает Google. Я обычно отправлял события из моих классов и имел дело с пользовательским интерфейсом в классе документа. Но теперь я хочу отделить весь пользовательский интерфейс от отдельного класса, доступного для других классов.

Я добавил его в качестве дочернего к классу main / document, но как мне ссылаться на основной класс без прохождения parent.parent shananigans?

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

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

package rpflash.ui {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Stage;
import nowplaying;

public class RPUserInterface{

    public function RPUserInterface(){
        var np:nowplaying = new nowplaying();
        MovieClip(this.root).addChild(np);
        }


}   
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

возможно, вы получите неопределенную ошибку, потому что root не тот, что был раньше.корень теперь является программной основой структуры, этап занял свое место в качестве держателя экранных объектов, и поэтому на него следует ссылаться для добавления дочерних объектов и т. д.

Стадия - это динамическое свойство, которое присваивается только объектам, которыенаходятся в списке отображения.поэтому, если вы создаете этот класс программно, это может вернуть нулевую ошибку, если вы просто измените корень для stage, потому что ему еще не дали ссылку на stage, потому что он не был добавлен в список.попробуйте использовать прослушиватель Event.ADDED_TO_STAGE, если он не подключен, чтобы быть уверенным, что stage не будет нулевым.

Еще более важно то, почему вы планируете прикреплять вещи к сцене таким образом.как правило, это не замечательная идея, так как сама сцена не будет иметь прямой ссылки на дочерний элемент (хотя вы можете использовать getChildByName или getChildAt) и может вызвать проблемы с потерей ссылок в дальнейшем.попробуйте подумать о добавлении дочернего элемента к текущему пользовательскому интерфейсу или добавлении функции, которая назначит какое-то значение передаваемому ролику, например:

public static const PLAY_THIS:String = "the event to play the mc";

public function RPUserInterface(){
    var np:nowplaying = new nowplaying();
    addEventListener(Event.ADDED_TO_STAGE, init);
}

public function getClip():nowplaying{
    return np;
}

private function init(ev:Event):void{
    //If you want it to play immediately, else use mouseEvent etc
    dispatchEvent(new Event(PLAY_THIS));
}

на основной временной шкале:

var userInt:RPUserInterface = new RPUserInterface();
userInt.addEventListener(RPUserInterface.PLAY_THIS, addFromThis);
addChild(userInt);

private function addFromThis(ev:Event){
    //add a global var ref here if needed.
    var clip = (ev.target as RPUserInterface).getClip();
    addChild(clip);
}

это может показаться более сложным и бесполезной тратой пространства, но это хорошая практика и намного проще заставить классы взаимодействовать таким образом.Кроме того, гораздо легче изменить на лету позже.

1 голос
/ 08 апреля 2010

Root устарел в AS3, если я правильно помню; если то, что вы пытаетесь сделать с помощью np MovieClip, это добавить его на сцену, то просто 1001 * сделает это.

Что касается ссылок на вещи в вашем основном классе Document из вашего пользовательского интерфейса, я предполагаю, что вы создаете класс пользовательского интерфейса из Main? Если это так, самый простой способ (хотя некоторые могут указать на то, что вы создаете надежную ссылку, которая может привести к утечке памяти) - это создать функцию в вашем классе пользовательского интерфейса, которая принимает объект типа Main, а затем вызывать ее из Main, передав это само по себе, вот так:

//inside Main
UIclassInstance.setMain(this);

//inside UI class
public function setMain(mainIn:Main):void
{
   main = mainIn;
}

Вам потребуется переменная-член в вашем классе пользовательского интерфейса типа Main. Таким образом, вы можете получить доступ к содержимому внутри Main, используя main.someObjectInMain;.

Надеюсь, это поможет,

Debu

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...