【问题标题】:Simulate AS2 _global variable using a simple class in AS3使用 AS3 中的简单类模拟 AS2 _global 变量
【发布时间】:2011-06-26 20:52:27
【问题描述】:

我最近开始(并且仍在进行)从 ActionScript 2 到 3 的转换。我在一个 AS2 项目中使用了 _global 变量,因为我需要一个可以从加载到我的主电影中的任何 swf 中访问的变量。这就像一种享受。

然而,随着 AS3 的出现,它从我的脚下抽了出来。经过多次谷歌搜索,一些人建议使用一个简单的类,该类具有一个可以公开设置和检索的简单变量。我创建了一个简单的类,导入它并操作值,一切顺利,但是我在主加载器电影中创建的类的实例仍然无法从加载到我的电影中的第二个 SWF 中访问。如果我在 SWF 中重新实例化动态加载的类,该值将恢复为类代码中的默认值,而不是在我的父(第一个)电影中设置的新值。

这是我的类代码,存储在外部 .as 文件中,有什么方法可以将 ostype 变量模拟为全局变量?

package{
    public class ostype {
        public var ismac:Boolean = false;
        public function returnOs(){
            return ismac;
        }
    }
}

如果它有助于了解代码的上下文,它会被用作一个简单的标识符,用于说明这个 flash 应用程序正在使用的操作系统(mac 或 windows),因此让我知道服务器内容 - 例如保存文件- 以不同的方式。

感谢您的指导。

西蒙

【问题讨论】:

    标签: flash actionscript-3 actionscript-2


    【解决方案1】:

    使用静态变量:

    package {
        class GlobalVars {
            public static var isMac:Boolean = false;
        }
    }
    

    然后您可以像这样访问任何成员:GlobalVars.isMac = true;

    此外,您可以使用返回操作系统的静态函数(尽管 Capabilities.os 应该可以为您解决问题)。

    【讨论】:

    • 您好weltraumpirat,感谢您的回复。我有一个单独的名为 videos.swf 的 swf 加载到我的 main.swf 电影的容器元素中。 isMac 的默认值为 false,但是,如果我在 main.swf 中将其设置为 true,如何从 video.swf 中获取该值?它不断给我在类中声明的默认 false 值。还是因为我的函数在函数范围内返回变量?
    • 在 videos.swf 中使用 getDefinitionByName("GlobalVars")。 livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/…
    • 或者创建一个实例变量 globals 而不是我描述的类,并通过videos.swf的接口将其公开。或者将全局变量放在 main.swf 的根对象中,然后在 videos.swf 中使用 stage.getChildAt(0)["globals"]。 ;)
    • 正如您在回复中所说的那样,它实际上很有效,谢谢。我在两个 swf 中都创建了一个新的类实例,这就是原因。只需键入 ostype.isMac = true;在我的主容器 SWF 文件中,然后通过在动态加载的 swf 中跟踪 ostype.isMac 对其进行测试,该值保持为真,而不是默认的假。非常感谢,你帮助了很多人。这是我将在许多项目中随身携带的那些宝贵的小经验之一。由你决定。
    猜你喜欢
    • 2011-04-15
    • 2017-07-28
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多