我有一个Adobe Air项目,其中包含许多可以添加(通过addChild()
)或删除(通过removeChild()
)的MovieClip。出于调试目的,我想获得当前舞台上所有MovieClip的快照(可见或不可见)。
输出应采用缩进的树状格式,显示MC名称(如果可用),可见性状态以及此MC为其实例的库对象。
trace / debug函数应该是递归的,以便不限制到一定数量的级别。
以下是示例输出:
|1| featureStage visible: true [object MovieClip]
|2| mcName1 visible: true [object syndicationRHS_2]
|2| mcName3 visible: false [object VideoScreen]
|3| toolbox visible: false [object toolboxMC_126]
|4| bgColorImg visible: true [object MovieClip]
|4| fontColorImg visible: false [object MovieClip]
|4| calendar visible: false [object MovieClip]
|3| tabDesign visible: true [object TabDesign_130]
|3| designBox visible: false [object MovieClip]
该项目有多个类(.as)文件,我希望能够从项目的任何地方调用此例程。
经过一段时间的搜索,我发现了一些有助于我在下面创建答案的想法。
答案 0 :(得分:0)
这是代码。它专门查找MovieClip对象,但是如果需要,可以修改它以查找其他对象类型。希望这会有所帮助。
在main.as
类定义中:
public var __childDepth:int;
同一个类模块中的公共函数
public function showAllChildren(mc:MovieClip)
{
var numC = mc.numChildren;
var tabStr:String = "";
for (var t = 0; t < __childDepth; t++)
{
tabStr = tabStr + "\t";
}
for(var i = 0; i < numC; i++)
{
var child = mc.getChildAt(i);
if (child is MovieClip) {
trace (tabStr
+ '|' + __childDepth + '| ' + mc.getChildAt(i).name
+ '\t visible: ' + mc.getChildAt(i).visible
// + '\t type:' + typeof (mc.getChildAt(i))
+ '\t' + mc.getChildAt(i));
}
if (child is MovieClip && child.numChildren > 0)
{
__childDepth ++;
showAllChildren (child);
__childDepth --;
}
}
}
然后在另一个(或相同的)类模块中:
objGrandParent.__childDepth = 1;
objGrandParent.showAllChildren(MovieClip(root));
objGrandParent
在哪里宣布showAllChildren
。就我而言,它是我引用的父母的父母。我想从舞台开始显示所有MC,因此传递给该函数的MC是MovieClip(root)
。
答案 1 :(得分:0)
您应该存储对数组中所有内容的引用以进行引用。你会发现它清除了这些问题。
以下是在数组中存储按钮的示例:
var aButtons: Array = new Array();
for (var i = 0; i < aButtons.length; i++) {
var mcNewButton: MyButton = new MyButton();
mcButtons.addChild(mcNewButton);
mcNewButton.x = i * 100;
mcNewButton.iButtonID = i;
mcNewButton.tMaintText.text = "Button " + i;
mcNewButton.addEventListener(MouseEvent.MOUSE_DOWN, fButtonPress);
aButtons.push(mcNewButton);
}
function fButtonPress(e:MouseEvent):void {
trace("fButtonPress: iButtonID: " + e.target.iButtonID);
}
然后你可以引用这样的属性:aButtons [i] .iButtonID
您将看到所有代码都清除,包括轻松检查/设置可见的属性。