【问题标题】:Flash: Pass constructor arguments to objects placed on stage?Flash:将构造函数参数传递给放置在舞台上的对象?
【发布时间】:2023-03-10 17:42:01
【问题描述】:

是否可以将构造函数参数传递给我放置在舞台上的实例对象? 实例对象的实例化是否像 .NET WinForms 一样集中在某个地方,所以我可以编辑 xxx = new CustomRecangle() 构造函数?

public class CustomRectangle extends MovieClip {         
    public function CustomRectangle(width:int, height:int) {
        this.width = width;
        this.height = height;
    }
}

【问题讨论】:

    标签: flash actionscript-3 constructor


    【解决方案1】:

    我不相信你能做到,但你有两个选择:

    1) 您可以将其滚动到 Flash 组件中。使您想要设置的各种属性在您的 AS 文件中可检查,将其编译为组件并将其放到舞台上。然后您可以删除多个实例并将这些实例的参数设置为在每个实例中都是唯一的。

    2) 您可以简单地添加一个在您的对象上调用的“init()”函数,并将其设置为将您的各种属性传递给 init() 而不是构造函数。

    最后,我认为这在法律上构成了 BLACK MAGIC,所以除非您绝对必须这样做,否则不要这样做:

    我不得不这样做一次,因为实际上没有其他方法。基本上假设您在舞台上有 200 个对象,每个对象都有一个唯一的实例名称。返回并手动重做每一个以接受自定义值将是太多的工作,并且由于程序的架构方式,很难为所有内容编写 init 调用。

    因此,您可以在每个对象上使用 this.name。编写一个静态 MyObjectManager 类,该类包含一个字典,该字典包含映射到实例名称的对象。然后在对象的构造函数中,您可以编写类似“init(MyObjectManager.dict[this.name])”的内容,并且 bob 是您的叔叔。

    让我知道这是否有意义。现在,请明白这样做存在很多问题——它使您的代码难以更新,并且它将您的所有逻辑与您的 on-state 命名约定紧密结合,因此如果您的任何实例名称关闭,那么您重新搞砸了。

    但是,这是一种选择。在这里列出的三个路径之间,您应该能够实现您需要的任何东西!

    【讨论】:

      【解决方案2】:

      可以,但是在扩展类的构造函数中不要忘记调用 super() 函数,巫婆会调用基类的构造函数。

      【讨论】:

      • 感谢您的关注。你能告诉我-how-或-where-我可以指定要传递的值吗? 1.) 我把物体放在舞台上。 2.) ...?
      【解决方案3】:

      如果它是您通过 Flash IDE 附加的符号,请参阅 this 回答。

      【讨论】:

      • 那么在 Flash IDE 中没有办法提供放置在舞台上的实例对象的值(不是默认参数值)吗?
      • 不行,把物体放到舞台上的时候怎么猜宽度和高度!?您可以在将对象添加到舞台后对其进行初始化。
      • 我知道 IDE 无法知道。但是IDE必须有一个地方放置代码来实例化对象?
      • 为什么您绝对需要立即执行此操作?你可以稍后初始化它,你想解决什么问题。
      • IDE 编译 Flash 应用程序的方式与使用 Flex 编译器完全不同,因此您不能真正假设您在舞台上所做的一切都在内部翻译为 AS 代码。
      【解决方案4】:

      我认为最好的办法是从 Flash 阶段中删除对象。使它成为一个库类。并做类似的事情

      var myRectangle = new CustomRectangle(100, 100);
      myRectangle.x = 200; // These should be whatever its location needs to be
      myRectangle.y = 200;
      addChild(myRectangle);
      

      【讨论】:

        猜你喜欢
        • 2012-07-09
        • 2011-11-28
        • 2013-12-12
        • 2014-06-04
        • 2014-07-15
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多