首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从非文档类调用stage对象?

如何从非文档类调用stage对象?
EN

Stack Overflow用户
提问于 2010-09-01 22:58:25
回答 3查看 1.4K关注 0票数 0

我面临的问题是,我试图从一个不是document类的类操作(在本例中添加eventListeners)舞台上的对象(在本例中是一些MovieClips)。

代码语言:javascript
运行
复制
1120: Access of undefined property trans.

现在我知道这可能是作用域的问题,我可能不能直接从非文档类访问stage对象(就像我在下面的代码中所做的那样),但是我不知道如何正确地访问它们。我已经被这个问题困扰了几个小时了,我已经阅读了很多类似问题的解决方案和与范围相关的问题的解释,但我仍然没有找到解决方案。我现在希望这里有人能帮我。

不管怎样,事情是这样的:

我有3个动态文本字段(称为"NL","FR“和"EN")在我的舞台上的电影剪辑称为"trans”。我正在尝试在第二个类中添加eventlisteners,使它们在单击时执行某些操作。

下面是我的document类:

代码语言:javascript
运行
复制
package {

  import flash.display.MovieClip;

  // Import custom classes.
  import classes.Translate;

  public class Main extends MovieClip {

    // Init Translation class on load.
    public var translate:Translate = new Translate();

    public function Main() {

    }

  }
}

这是我的自定义类Translate (在“classes”子文件夹中)。

代码语言:javascript
运行
复制
package classes {

  import flash.display.MovieClip;
  import flash.events.MouseEvent;

  public class Translate extends MovieClip {

    public function Translate() {

      // Init translation eventListeners.
      trans.NL.addEventListener(MouseEvent.CLICK,
        function(event:MouseEvent):void {
          loadNl();
        }
      );

      trans.FR.addEventListener(MouseEvent.CLICK,
        function(event:MouseEvent):void {
          loadFr();
        }
      );

      trans.EN.addEventListener(MouseEvent.CLICK,
        function(event:MouseEvent):void {
          loadEn();
        }
      );
    }

    public function loadNl() {
      trace("NL");
    }

    public function loadFr() {
      trace("FR");
    }

    public function loadEn() {
      trace("EN");
    }

  }
}

提前感谢您抽出时间来帮助我。

干货

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-11 19:42:07

抱歉,我还没有回答我自己的问题。

我正在寻找的解决方案相当简单,主要倾向于Ben的答案。

基本上,我想在其他类中使用我的主类。我只需要向新对象的类构造函数发送一个对它的引用。

代码语言:javascript
运行
复制
package {

  import flash.display.MovieClip;

  // Import custom classes.
  import classes.Translate;

  public class Main extends MovieClip {

    private var _instance:MovieClip;

    public function Main() {
      _instance = this;

      var trans:Translate = new Translate(_instance);
    }
  }
}

现在我可以通过这个引用引用我的主类和stage对象。

代码语言:javascript
运行
复制
package classes {

  import flash.display.MovieClip;

  public class Translate {

    private var _main:MovieClip;

    public function Translate(main:MovieClip) {
      _main = main;

      // Trace the amount of stage objects.
      trace(_main.stage.numChildren); 
    }
  }
}

感谢Ben和Scott的帮助。

票数 1
EN

Stack Overflow用户

发布于 2010-09-02 12:48:47

斯科特,你是对的,但它可以更简单。这就是我要做的:

代码语言:javascript
运行
复制
public class Main
{

    public static var STAGE:Stage

    public function Main()
    {
        STAGE = this.stage;
    }
}

从那时起,我就在任何地方使用Main.STAGE。

票数 1
EN

Stack Overflow用户

发布于 2010-09-02 00:12:58

需要设置对Stage/Document Class的引用。您可以使用另一个类来存储引用,即StageReference。在主构造器中,您设置了对Stage的引用,然后可以通过静态方法调用它。

代码语言:javascript
运行
复制
    public class StageReference
{

    private static var _stage:Stage
    private static var _root:MovieClip;

    static public var INSTANCE:StageReference;

    public function StageReference():void
    {
    }

    static public function addStage( stageObj:Stage ):void
    {
        _stage = stageObj;
    }
    static public function addRoot( rootObj:MovieClip ):void
    {
        _root = rootObj;
    }

    static public function getStage():Stage
    {
        return( _stage );
    }

    static public function getRoot():MovieClip
    {
        return( _root );
    }
}  

// Main Class
public function Main() { 
   StageReference.addStage(stage); 
   StageReference.addRoot(this) 
 }

// Translate Class
public function Translate() { 
   var stage:Stage = StageReference.getStage();
   stage.trans.NL.addEventListener.....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3619434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档