Error: Error #1502: 脚本的执行时间已经超过了 15 秒的默认超时设置

用的是flash ActionScript3.0, 调试出现问题: Error: Error #1502: 脚本的执行时间已经超过了 15 秒的默认超时设置。 at _1811114060_fla::MainTimeline/frame3()[_1811114060_fla.MainTimeline::frame3:29] at flash.display::MovieClip/gotoAndPlay() at _1811114060_fla::MainTimeline/goGame1()[_1811114060_fla.MainTimeline::frame2:5]

frame2代码如下:

stop();

btn_game1.addEventListener(MouseEvent.CLICK,goGame1);
function goGame1(e:MouseEvent){
    gotoAndPlay(3);
}

frame3代码如下:

stop();

var i:uint = 0;
var j:uint = 0;
var k:Boolean = true;
var array_btn:Array = new Array(btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9);
var array_pos:Array = [];
var array_rand:Array=[];//存放9个数字随机排列

for (i=0; i<9; i++)
{
    array_pos[i] = [];
}
//9行2列,存放9个位置坐标
for (i=0; i<9; i++)
{
    array_pos[i][0] = 50 + 100 * (i / 3);
    array_pos[i][1] = 50 + 100 * (i % 3);
}


//获取0-8随机排列数组
i = 0;
while (i<9)
{
    array_rand[i] = int(Math.random() * 8);
    k = true;
    
    for (j=0; j<i; j++)      //与前面的随机数比较,如果相同则i不能加1 (此为上述错误信息中的frame3:29)
    {
        if (array_rand[i] == array_rand[j])
        {
            k = false;
            break;
        }
    }
    
    if (k)
    {
        i++;
    }
}


for (i=0; i<9; i++)
{    
    var ii:uint=0;
    ii=array_rand[i];
    array_btn[ii].x = array_pos[i][0];
    array_btn[ii].y = array_pos[i][1];
}

球球了,救救孩子。

frame3的第8行改成var array_rand:Array;后 错误变成了 TypeError: Error #1009: 无法访问空对象引用的属性或方法。 at _1811114060_fla::MainTimeline/frame3()[_1811114060_fla.MainTimeline::frame3:26] at flash.display::MovieClip/gotoAndPlay() at _1811114060_fla::MainTimeline/goGame1()[_1811114060_fla.MainTimeline::frame2:5]


一段段代码试过之后发现是生成随机数组那一段代码有问题,该成下面这样就没有错误了,虽然还是不知道为什么之前那个是错的

//获取0-8随机排列数组
for(i=0;i<9;i++){
    array_rand[i]=Math.floor(Math.random()*9);
    for(j=0;j<i;j++){
        if(array_rand[i]==array_rand[j]){
            i--;
            break;
        }
    }
}

参考GPT和自己的思路:

你好,根据你提供的代码和错误信息,这个错误是由于脚本执行时间超过了默认的15秒而引起的。具体的原因是在frame3中生成随机数组那一段代码可能出现了死循环,导致脚本一直在执行而超时触发错误。

你已经成功修正了这个问题,将生成随机数组的代码改为了另一种更有效的方法,避免了可能出现的死循环,因此不再出现错误。

希望我的回答能够帮到你,如有其他问题,欢迎继续咨询。