我试图每隔一秒随机调用下面提到的一个函数。这是我的代码。
counter=Math.floor(1+Math.random()*3); // genertate random number from 1 to 3
setTimeout("startenemy"+counter, 1000); // call one function with a delay of one second
function startenemy1()
{
trace("1");
enemy1.gotoAndPlay(2);
}
function startenemy2()
{
trace("2");
enemy2.gotoAndPlay(2);
}
function startenemy3()
{
trace("3");
enemy3.gotoAndPlay(2);
}
在这种情况下,setTimeout函数对我不起作用。 但是如果我使用一种非常原始的使用setTimeout的方法,它就可以正常工作。
setTimeout(startenemy1, 1000); // call one function with a delay of one second
function startenemy1()
{
trace("1");
enemy1.gotoAndPlay(2);
}
这个实现工作正常。所以我知道我正在使用带有错误参数的setTimeout函数。
如果有其他方法可以实现,请告诉我。
答案 0 :(得分:1)
setTimout采用Function类型的参数。这样的事情会起作用:
function startenemy1():void
{
trace("1");
enemy1.gotoAndPlay(2);
}
function startenemy2():void
{
trace("2");
enemy2.gotoAndPlay(2);
}
function startenemy3():void
{
trace("3");
enemy3.gotoAndPlay(2);
}
function startARandomEnemy():void
{
var functions:Array = [startenemy1,startenemy2,startenemy3];
setTimeout(functions[int(Math.random()*functions.length)], 1000); // call one function with a delay of one second
}
更好的设计是将敌人对象存储在数组中,而不是创建名为startenemy *()的函数。
答案 1 :(得分:0)
您可以使用括号语法来获取对函数的引用:
var counter=Math.floor(1+Math.random()*3);
var method:Function = this["startenemy"+counter];
setTimeout( method, 1000);
但是使用一个启动匿名MovieClip的方法并动态引用敌方影片剪辑会更有效:
function startEnemy( mc:MovieClip ) : void {
mc.gotoAndPlay(2);
}
var counter=Math.floor(1+Math.random()*3);
var mc:MovieClip = this["enemy"+counter];
setTimeout( startEnemy, 1000, mc); // mc will become the first parameter
// passed to startEnemy()