Arrays AS3动态地将MovieClip从库连接到舞台
我真的到处找了,我开始想可能是我的术语阻碍了我找到答案 我的库中有一个MovieClip,可以导出到ActionScript 3.0,其中有一个名为“Info_Win”的类(它基本上是一个弹出窗口,其内容取决于它的实例名) 我将在主舞台上添加一定数量的movieclip,每个movieclip都必须有一个自定义的实例名,一旦它出现在舞台上,我就可以访问它(一个数组列出了实例名)。如前所述,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
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动态声明?