Actionscript 3 从数组中调用随机函数

Actionscript 3 从数组中调用随机函数,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我在数组中列出了三个函数。现在我需要在按下按钮时调用三个随机函数。然而,当我按下按钮时,它会调用所有三个函数,我不太确定哪里出了问题。现在看起来是这样的: function Arm1function1(){ this.parent.parent.parent.Armfront1.visible = true; this.parent.parent.parent.Armback1.visible = false; } function Arm1function2(){ this.parent.p

我在数组中列出了三个函数。现在我需要在按下按钮时调用三个随机函数。然而,当我按下按钮时,它会调用所有三个函数,我不太确定哪里出了问题。现在看起来是这样的:

function Arm1function1(){
this.parent.parent.parent.Armfront1.visible = true;
this.parent.parent.parent.Armback1.visible = false;
}

function Arm1function2(){
this.parent.parent.parent.Armfront1.visible = false;
this.parent.parent.parent.Armback1.visible = true;
}

function Arm1function3(){
this.parent.parent.parent.Armfront1.visible = false;
this.parent.parent.parent.Armback1.visible = false;
}

function getRandomElementOf(Armbuttonarray1:Array):Object {
var Armbuttonarray1:Array = [Arm1function1(), Arm1function2(), Arm1function3()];
var idx:int=Math.floor(Math.random() * Armbuttonarray1.length);
return Armbuttonarray1[idx];
}

Randombutton1part1.addEventListener(MouseEvent.CLICK, Randombutton1part1Click);
function Randombutton1part1Click(e:MouseEvent):void
{   
getRandomElementOf(null);

}

我哪里出了问题,有什么线索吗?

你的问题是这一行:

var Armbuttonarray1:Array = [Arm1function1(), Arm1function2(), Arm1function3()];
填充该数组时,实际上是用函数的结果填充它

应该是:

var Armbuttonarray1:Array = [Arm1function1, Arm1function2, Arm1function3];
请注意缺少括号()

您希望在click处理程序上实际执行该函数,因此还需要对其进行一些调整:

getRandomElementOf(null)();


另外,您的getRandomElementOf函数应该看起来更像这样:

function getRandomElementOf(array:Array):Object {
    return array[Math.floor(Math.random() * array.length)];
}
然后做:

getRandomElementOf([Arm1function1, Arm1function2, Arm1function3])();

哦,我明白了!谢谢你的帮助。第二个选项当然很有用,因为我需要用其他函数数组再创建三次相同的东西!我看到你已经对你的问题有了答案,但是请考虑修改你的代码,让任何需要维护它的人都清醒。不需要在祖先上操作对象,只需分派三个冒泡事件中的一个,并让祖先进行更改。同样,考虑到你可以制作一个四帧的MC,其中适当的ARM状态正在显示,只需导航一帧、两帧、三帧或(或使用与事件名称匹配的标签)基于你需要的一个。我现在所做的工作(我完全在自己的工作中,我是唯一一个必须处理代码的人)。所以我没问题!把它放在不同的帧上是我的主要想法,这是我用我的其他mc做的,但是在这样做的时候,颜色变换不能正常工作。因此,我必须用visibility false/true来解决它。
getRandomElementOf([Arm1function1, Arm1function2, Arm1function3])();