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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Actionscript 3 将事件侦听器添加到多维数组_Actionscript 3 - Fatal编程技术网

Actionscript 3 将事件侦听器添加到多维数组

Actionscript 3 将事件侦听器添加到多维数组,actionscript-3,Actionscript 3,我想知道在actionscript3中,是否可以循环通过多维数组并添加事件侦听器,如果可以,我的方法是否正确 var localSegment:Array = [segment1.system_Cab, segment1.programs_Cab, segment1.userFiles_Cab, segment1.rollback_Cab] var external_MediaSegment:Array = [segment2.externalHD_Cab, segment2.virtualDi

我想知道在actionscript3中,是否可以循环通过多维数组并添加事件侦听器,如果可以,我的方法是否正确

var localSegment:Array = [segment1.system_Cab, segment1.programs_Cab, segment1.userFiles_Cab, segment1.rollback_Cab]
var external_MediaSegment:Array = [segment2.externalHD_Cab, segment2.virtualDisk_Cab]
var network_LocationSegment:Array = [segment3.homeServer_Cab, segment3.wifiFlashdrive_Cab, segment3.encrivaPlay_Cab]
var superVolumes:Array = [localSegment, external_MediaSegment, network_LocationSegment]

for (var i:Number = 0; i < superVolumes.length; i++ ){
    var fmCabinent = superVolumes[i];
    fmCabinent.addEventListener(MouseEvent.CLICK, openCabinet);
}

var targetCabinent;

function openCabinet (e:MouseEvent):void{
    targetCabinent = e.currentTarget;
    if (targetCabinent.currentFrame == 1){
        targetCabinent.play();
}
var localSegment:Array=[segment1.system\u Cab,segment1.programs\u Cab,segment1.userFiles\u Cab,segment1.rollback\u Cab]
var external_MEDIASEMENT:Array=[SECTION2.externalHD_Cab,SECTION2.virtualDisk_Cab]
var网络位置段:数组=[section3.homeServer\u Cab,section3.wifiFlashdrive\u Cab,section3.encrivaPlay\u Cab]
var superVolumes:Array=[localSegment,external_MediaSegment,network_LocationSegment]
对于(变量i:Number=0;i
无法将单击侦听器添加到数组中

查看您的代码,在外部数组
superVolumes
中循环,并尝试向其成员添加单击侦听器,但其所有成员也是数组

您可以做的是创建一个嵌套循环(循环中的一个循环),并将侦听器添加到这些子数组中可能显示的对象中

for (var i:int = 0; i < superVolumes.length; i++ ){
    for(var j:int = 0; j < superVolumes[i].length; j++){
        superVolumnes[i][j].addEventListener(MouseEvent.CLICK, openCabinet);
    }
}

无法将单击侦听器添加到数组中

查看您的代码,在外部数组
superVolumes
中循环,并尝试向其成员添加单击侦听器,但其所有成员也是数组

您可以做的是创建一个嵌套循环(循环中的一个循环),并将侦听器添加到这些子数组中可能显示的对象中

for (var i:int = 0; i < superVolumes.length; i++ ){
    for(var j:int = 0; j < superVolumes[i].length; j++){
        superVolumnes[i][j].addEventListener(MouseEvent.CLICK, openCabinet);
    }
}

好的,谢谢你尝试一下。嵌套循环对我来说是一个新概念。如果听起来很傻,很抱歉,但是在这种情况下[j]代表什么?你需要从2D数组中获取一个元素。在AS3中,2D数组是数组的数组。因此,
superVolumes[i]
将为你建立一个数组,然后你可以再次迭代,
superVolumes[i][j]
nets-your当前子数组的实际元素。还有一件事;我如何使用if语句来检测superVolume数组中哪个子数组注册了单击事件;我该怎么办?
function openCabinet(e:MouseEvent):void{if(e.currentTarget==superVolumes[0]){segment1.visible=false;}
@SoloWalker您需要迭代超级卷并检查超级卷[i].indexOf(e.currentTarget)>-1条件。如果是真的,那么当前超级卷[i]就是包含e.currentTarget的超级卷。好的,谢谢您尝试一下。嵌套循环对我来说是一个新概念。抱歉,这听起来很愚蠢,但[j]会怎么做在这种情况下表示?您需要从2D数组中获取元素。在AS3中,2D数组是数组的数组。因此,
superVolumes[i]
将为您生成一个数组,然后您可以再次迭代该数组,
superVolumes[i][j]
nets-your当前子数组的实际元素。还有一件事;我如何使用if语句来检测superVolume数组中哪个子数组注册了单击事件;我该怎么办?
function openCabinet(e:MouseEvent):void{if(e.currentTarget==superVolumes[0]){segment1.visible=false;}
@SoloWalker您需要迭代超级卷并检查超级卷[i].indexOf(e.currentTarget)>-1条件。如果为true,则当前超级卷[i]是包含e.currentTarget的超级卷。
for (var iterator:int = 0; iterator < superVolumes.length; iterator++ ){
    //the members of superVolumes are all arrays
    //get the sub array at current index ('iterator') and assign it to a variable
    var curArray:Array = superVolumes[iterator] as Array;

    //now loop through this sub array
    //since we have 'iterator' (previously 'i') as the iterator/index name in the outer loop
    //we need a different name for the iterator on the inner loop
    //let's call this iterator 'innerIterator' (previously 'j')
    for(var innerIterator:int = 0; innerIterator < curArray.length; innerIterator++){
        curArray[innerIterator].addEventListener(MouseEvent.CLICK, openCabinet);
    }
}