【问题标题】:How to access dynamic text field on stage from within the document class如何从文档类中访问舞台上的动态文本字段
【发布时间】:2010-09-02 18:45:51
【问题描述】:

我正在尝试访问已放置在舞台上(在影片剪辑中)的文本输入,但没有成功。

我已经为这个动态文本字段定义了一个实例名称,即 currentUserCount

我在文档类动作脚本文件中设置了类似的内容:

package {

    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;

    public class myProject extends Sprite {

        public function myProject() {
            // Trying stuff like
            trace(currentUserCount);
            trace(movieClipName.currentUserCount);
            trace(root.currentUserCount);
        }
    }
}

我错过了什么?

当我运行它时,我得到:

1120: Access of undefined property currentUserCount.
1120: Access of undefined property movieClipName.
1119: Access of possibly undefined property movieClipName through a reference with static type flash.display:DisplayObject.
1120: Access of undefined property currentUserCount.

【问题讨论】:

  • 您是否遇到任何编译器错误?跟踪 movieClipName 时会发生什么?
  • 我已经添加了编译器输出
  • 如果没有看到 .fla 就很难得到一个好主意,但我的猜测是影片剪辑没有实例名称。
  • 影片剪辑嵌套在另一个影片剪辑中,这有关系吗?
  • 啊……好吧,这很重要。所以现在我引用了 animation1.movi​​eClipName 并且我可以设置/检索文本框的文本,但是一旦影片剪辑再次循环,文本框中的文本就会被重置。此外,这个文本框在其他影片剪辑中被引用,所以我希望它总是以某种方式设置为新值。我可以以某种方式将代码添加到创建事件或文本框周围的影片剪辑上吗?

标签: actionscript-3 actionscript


【解决方案1】:

如果舞台上的所有影片剪辑内部都有相同的嵌套剪辑,您也可以像这样引用内部剪辑:

for (var i=0; i<stage.numChildren; i++){
  var mc = stage.getChildAt(i)
  mc.subClip.play()
}

【讨论】:

    【解决方案2】:

    确保 MovieClip 和 TextField 在您的 .fla 文件中有实例名称。

    // MovieClip instance name: mc;
    // Textfield instance name: tf;
    

    然后在你的文档类中:

    package {
    
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.display.Sprite;
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.Stage;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat;
    
        public class myProject extends Sprite {
    
            public function myProject() {
                mc.tf.text = "Text you wanna see";
                trace(mc.tf); // [Object TextField]
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      我的问题是我在一个影片剪辑中引用了一个影片剪辑,我不知道我必须为每个实例创建一个实例名称,并以我的方式在每个实例的代码中工作。

      我认为实例名称是全局命名空间的一部分。

      所以我做了类似的事情:

      myMovieClip.play();
      

      当我应该做的时候:

      mainMovieClip.subMovieClip.myMovieClip.play();
      

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        相关资源
        最近更新 更多