AS3 Глобальный класс, который может добавлять объекты на сцену - PullRequest
1 голос
/ 31 января 2012

Итак, я недавно узнал, что, импортируя класс в мой основной класс, я могу получить доступ к его функциям из любого другого класса.НО .... одна из моих функций в импортированном классе должна добавить экранные объекты на сцену.Я получил доступ к статической функции просто отлично, но она не может добавлять объекты на сцену.Кажется, он даже не распознает addChild.Это потому, что его нет в самом списке отображения?

Что мне здесь не хватает?Как бы вы, ребята, решили эту проблему.Я был так близко, но до сих пор!

Код выглядит так:

package {

import flash.display.Sprite;
import PopHandler;

public class MyMainClass extends Sprite {
    public function MyMainClass():void {
        PopHandler.LaunchPop();
    }
}

}

Это импортированный класс, который ничего не добавляет к сцене.

package {
import flash.display.Sprite;

public class PopHandler extends Sprite {

    public function PopHandler():void {

    }

    public static function LaunchPop() {
        var bp:BreakPop = new BreakPop();
        bp.x = 500;
        bp.y = 347;
        addChild(bp);
    }
}   

}

BreakPop - это элемент в моей библиотеке.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Поскольку вы используете статический метод, ваш PopHandler не является экземпляром спрайта и поэтому не имеет доступа к свойству stage. Если вы хотите оставить его как статический метод, тогда вы можете пропустить extends Sprite и просто перейти к public class PopHandler {

Кстати, вот простое решение вашей проблемы: почему бы не передать DisplayObjectContainer, к которому вы хотите добавить BreakPop, в качестве параметра вашего статического метода?

Пример:

public static function LaunchPop(target:DisplayObjectContainer) {
    var bp:BreakPop = new BreakPop();
    bp.x = 500;
    bp.y = 347;
    target.addChild(bp);
}

Затем вы называете это так (несколько примеров):

PopHandler.LaunchPop(this); // <-- adding to current object
PopHandler.LaunchPop(root as DisplayObjectContainer); // <-- adding to root
PopHandler.LaunchPop(stage); // <-- adding to stage
3 голосов
/ 31 января 2012

Расширьте свой основной класс документа и добавьте туда статическую переменную, после чего этап на этапе инициализации:

public class Main extends MovieClip {

   public static var stage:Stage;

   public function Main ():void {
     Main.stage = stage;
   }
}

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

Main.stage.addChild(element)
...