Flash:将构造函数参数传递给放置在舞台上的对象?

Flash:将构造函数参数传递给放置在舞台上的对象?,flash,actionscript-3,constructor,Flash,Actionscript 3,Constructor,是否可以将构造函数参数传递给我放在舞台上的实例对象?实例对象的实例化是否像.NET WinForms那样集中在某个地方,以便我可以编辑xxx=new CustomRecangle()构造函数 public class CustomRectangle extends MovieClip { public function CustomRectangle(width:int, height:int) { this.width = width;

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

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

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

是的,您可以,但是在扩展类的构造函数中不要忘记调用super()function witch将调用基类的构造函数。

如果是通过Flash IDE附加的符号,请参阅answer。

如果是通过Flash IDE附加的符号,请参阅answer。

我不相信您可以这样做,但您有两个选项:

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

2) 只需添加一个在对象上被调用的“init()”函数,并将其设置为将各种属性传递到init()而不是构造函数中

最后,我认为这在法律上构成了黑魔法,所以不要这样做,除非你必须:

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

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

让我知道这是否有意义。现在,请务必理解,这样做存在大量问题-这会使您的代码很难更新,而且它会将您的所有逻辑紧密地耦合到您的on state命名约定中,因此如果您的任何实例名称被禁用,那么您就完蛋了


但是,这是一种选择。在这里列出的三条道路之间,你应该能够实现你所需要的一切

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

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

2) 只需添加一个在对象上被调用的“init()”函数,并将其设置为将各种属性传递到init()而不是构造函数中

最后,我认为这在法律上构成了黑魔法,所以不要这样做,除非你必须:

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

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

让我知道这是否有意义。现在,请务必理解,这样做存在大量问题-这会使您的代码很难更新,而且它会将您的所有逻辑紧密地耦合到您的on state命名约定中,因此如果您的任何实例名称被禁用,那么您就完蛋了


但是,这是一种选择。在这里列出的三条道路之间,你应该能够实现你所需要的一切

我认为你最好的办法是从Flash阶段移除该对象。让它成为一个图书馆类。然后做一些类似的事情

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

我认为你最好的办法是把这个物体从闪光灯的舞台上移开。让它成为一个图书馆类。然后做一些类似的事情

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

谢谢你的注意。您能告诉我如何或在哪里指定要传递的值吗?1.)我将物体放在舞台上。2.…?感谢您的关注。您能告诉我如何或在哪里指定要传递的值吗?1.)我将物体放在舞台上。2.)…?因此无法提供Flash IDE中放置在舞台上的实例对象的值(不是默认参数值)?不,在将对象放置到舞台上时,如何猜测宽度和高度!?你可以在对象被添加到后台后初始化它。我知道IDE没有办法知道。但是IDE必须在某个地方放置代码来实例化对象?为什么绝对需要在实例化时执行此操作?您可以稍后对其进行初始化,您想解决的问题是什么。IDE以与Flex编译器完全不同的方式编译Flash应用程序,因此您不能真正假设您在后台执行的所有操作都在内部转换为代码。因此,无法提供实例对象的值(不是默认参数值)在Flash IDE中,哪些放置在舞台上?不,当您将对象放置在舞台上时,如何猜测宽度和高度!?您可以在将对象添加到舞台上后初始化对象。我理解IDE无法知道。但必须有一个IDE放置代码的位置来实例化对象?为什么需要ab解决方案是在瞬间完成吗?您可以稍后初始化它,您遇到了什么问题