Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AS3动态地将MovieClip从库连接到舞台_Arrays_Actionscript 3_Instance_Dynamically Generated_Addchild - Fatal编程技术网

Arrays AS3动态地将MovieClip从库连接到舞台

Arrays AS3动态地将MovieClip从库连接到舞台,arrays,actionscript-3,instance,dynamically-generated,addchild,Arrays,Actionscript 3,Instance,Dynamically Generated,Addchild,我真的到处找了,我开始想可能是我的术语阻碍了我找到答案 我的库中有一个MovieClip,可以导出到ActionScript 3.0,其中有一个名为“Info_Win”的类(它基本上是一个弹出窗口,其内容取决于它的实例名) 我将在主舞台上添加一定数量的movieclip,每个movieclip都必须有一个自定义的实例名,一旦它出现在舞台上,我就可以访问它(一个数组列出了实例名)。如前所述,Movieclip实例名称将定义弹出窗口的内容 这是数组: static public var inform

我真的到处找了,我开始想可能是我的术语阻碍了我找到答案

我的库中有一个MovieClip,可以导出到ActionScript 3.0,其中有一个名为“Info_Win”的类(它基本上是一个弹出窗口,其内容取决于它的实例名)

我将在主舞台上添加一定数量的movieclip,每个movieclip都必须有一个自定义的实例名,一旦它出现在舞台上,我就可以访问它(一个数组列出了实例名)。如前所述,Movieclip实例名称将定义弹出窗口的内容

这是数组:

static public var informationWindows:Array = new Array(     
    {_informationName:"iwPanelDescription", _popupType:"3"},
    {_informationName:"iwHelpConsole", _popupType:"2"},
    {_informationName:"iwExampleInstanceName", _popupType:"1"}
);
var info_win:Info_win = new Info_win();
addChild(info_win);
info_win.name = "iwPanelDescription";
var mcName:String = "iwPanelDescription";
var this[mcName]:Info_win = new Info_win();
addChild(this[mcName]);
在数组中运行并返回_informationName应该很简单

我遇到的问题实际上是控制MovieClip实例名称的名称。在AS2中,我会在参数的左侧包装一个eval()参数

我正在使用以下代码:创建并添加剪辑,但这并不好:

static public var informationWindows:Array = new Array(     
    {_informationName:"iwPanelDescription", _popupType:"3"},
    {_informationName:"iwHelpConsole", _popupType:"2"},
    {_informationName:"iwExampleInstanceName", _popupType:"1"}
);
var info_win:Info_win = new Info_win();
addChild(info_win);
info_win.name = "iwPanelDescription";
var mcName:String = "iwPanelDescription";
var this[mcName]:Info_win = new Info_win();
addChild(this[mcName]);
从这里开始,如果我可以对实例名称问题进行排序,那么我可以使用一个简单的for循环来访问我创建的数组,并动态设置实例名称

尝试过这样的事情,但没有任何乐趣:

static public var informationWindows:Array = new Array(     
    {_informationName:"iwPanelDescription", _popupType:"3"},
    {_informationName:"iwHelpConsole", _popupType:"2"},
    {_informationName:"iwExampleInstanceName", _popupType:"1"}
);
var info_win:Info_win = new Info_win();
addChild(info_win);
info_win.name = "iwPanelDescription";
var mcName:String = "iwPanelDescription";
var this[mcName]:Info_win = new Info_win();
addChild(this[mcName]);

我们将非常感激您所做的一切

有什么问题吗

var mcName = "iwPanelDescription"
info_win.name = mcName;
从这里开始,如果您需要
iwPanelDescription
电影剪辑,您可以继续

var mc = this.getChildByName(mcName);

你已经完成了。

你是否考虑过存储自己的参考资料而不是依赖舞台

您可以这样轻松地执行此操作:

var panels:Object = { };

panels.iwPanelDescription = new Info_win();
addChild(panels.iwPanelDescription);

trace(panels.info_win); // Get a reference via panels.
并进一步说明如何将其用于
informationWindows
阵列:

for each (var i:Object in informationWindows) {
    trace( panels[i._informationName] );
}
如果您想动态创建这些实例,您可以这样使用:

解决了

模拟器类

package 
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    import fl.transitions.TweenEvent;
    import flash.external.ExternalInterface;

    public class Simulator extends MovieClip
    {
        public static var informationWindowCount:Number = simulator_constants.informationWindows.length;
        public static var currentWindowIndex:String = "0";
        public function Simulator()
        {
            addInformationWindows();


        }
        public function addInformationWindows() {
            var infoWinArray:Array = [];
            // Count the number of windows that will be called upon...

            // Add the information windows to the Stage...
            for (var i:Number=1; i<=informationWindowCount;i++){
                infoWinArray[i-1] = new Info_win();
                infoWinArray[i-1].name = simulator_constants.informationWindows[i-1]._informationName;
                this.addChild(infoWinArray[i-1]);
                currentWindowIndex = String(i);
            }
        }
    }
}
优胜班

package  {

    import flash.display.MovieClip;


    public class Info_win extends MovieClip 
    {
        public static var informationName:String = Simulator.currentWindowIndex;
        var info_win_panel_content_title:Info_win_panel_title = new Info_win_panel_title();
        var info_win_panel_content_content:Info_win_panel_content = new Info_win_panel_content();




        public function Info_win() {
            //Get details on this information window...
            var _informationName = simulator_constants.informationWindows[Simulator.currentWindowIndex]._informationName;
            var _popupType = simulator_constants.informationWindows[Simulator.currentWindowIndex]._popupType;
            var _x = simulator_constants.informationWindows[Simulator.currentWindowIndex]._x;
            var _y = simulator_constants.informationWindows[Simulator.currentWindowIndex]._y;
            var _title = simulator_constants.informationWindows[Simulator.currentWindowIndex]._title;
            var _subtitle = simulator_constants.informationWindows[Simulator.currentWindowIndex]._subtitle;
            var _media = simulator_constants.informationWindows[Simulator.currentWindowIndex]._media;
            var _text = simulator_constants.informationWindows[Simulator.currentWindowIndex]._text;

            //Add the standard componoents for all windows...
            this.name = _informationName;
            this.x = _x;
            this.y = _y;

            //Conditional construction to happen in here...

            //components
            addChild(info_win_panel_content_title);
            addChild(info_win_panel_content_content);
            //positioning of components...
            info_win_panel_content_content.y = info_win_panel_content_title.height;
            trace(this.width);



            //Outputs for debug...
            /*trace("_informationName: "+_informationName);
            trace("_popupType: "+_popupType);
            trace("_x: "+_x);
            trace("_y: "+_y);
            trace("_title: "+_title);
            trace("_subtitle: "+_subtitle);
            trace("_media: "+_media);
            trace("_text: "+_text);
            trace("------------------------------");
            trace("------------------------------");
            trace("   ");*/
        }
    }

}

从这里开始,我仍然坚持面板必须显式声明,而不是来自数组。关于类中包含的信息面板,将会有更多的数据。@JonBoy2000哦,我明白了,我没有从你的问题中领会到这一点。您可以使用
getDefinitionByName
完成所需操作,我现在将使用它更新我的答案。嗨,Marty,谢谢您的帮助。我陷入困境的地方是在定义的左侧定义变量名。在那里我想做一些像这样的事情。。。。panels.this[myArrayofInstanceNames[i]=new Info_win();类本身将在数组中查找,当找到匹配项时,它将查找其弹出类型。从那里,它将知道要在其内部输入哪些按钮和数据。如果没有实例名称,我无法使用此名称。从Info_win类中查找其详细信息的名称。我现在就快找到了!抱歉,我仍在继续使用此站点!code'var infoWinArray:Array=[];var informationWindowCount:Number=simulator\u constants.informationWindows.length;用于(var i:Number=1;我需要帮助。我已经尝试过了,并且能够得到一个结果,但遗憾的是,我又回到了同一个问题,其中'mcName'和'mc'是静态变量名,需要动态声明。我如何使mc动态声明?