Arrays ActionScript 3数组返回运行时错误
好的,我有下面的代码,它所做的就是在屏幕上放置3个纯色方块,在右下角放置一个彩虹色方块。当用户按下任何一个纯色方块时,该点会被彩虹色的方块填满,彩虹的原始位置会出现被点击的方块。除了一件事,代码几乎可以完美地工作。当用户尝试单击彩虹方块下的方块时,会返回运行时错误 我的代码: 我Arrays ActionScript 3数组返回运行时错误,arrays,actionscript-3,flash,runtime-error,Arrays,Actionscript 3,Flash,Runtime Error,好的,我有下面的代码,它所做的就是在屏幕上放置3个纯色方块,在右下角放置一个彩虹色方块。当用户按下任何一个纯色方块时,该点会被彩虹色的方块填满,彩虹的原始位置会出现被点击的方块。除了一件事,代码几乎可以完美地工作。当用户尝试单击彩虹方块下的方块时,会返回运行时错误 我的代码: 我 mport flash.display.DisplayObject; 导入flash.ui.Mouse; 变量t1:DisplayObject=new mc_1; 变量t2:DisplayObject=new mc_2
mport flash.display.DisplayObject;
导入flash.ui.Mouse;
变量t1:DisplayObject=new mc_1;
变量t2:DisplayObject=new mc_2;
变量t3:DisplayObject=new mc_3;
变量t4:DisplayObject=新的mc_4;
变量tile:Array=[[t1,t2],[t3,t4]];
var r:int;
var c:int;
变量a:int=50;
变量b:int=50;
var aa:int=1;
var bb:int=1;
函数重画(){
a=50;
b=50;
对于(r=0;r如果您查看代码,您会发现:
//Down:
else if (e.target == tile[aa+1][bb]) {
tile[aa][bb] = e.target;
aa += 1;
tile[aa][bb] = t4;
reDraw();
trace("Down");
}
现在您可以在这里看到,它正在查找磁贴[aa+1],但在开始时aa=1,因此aa+1=2和磁贴[2]不存在或未定义。您需要将逻辑更改为:
var tileFound:Boolean = false;
for(var i:int = 0; i < 2; i++){
for(var j:int = 0; j < 2; j++){
if(tile[i][j] == e.target){
tileFound = true;
tile[aa][bb] = e.target;
tile[i][j] = t4;
if(i > aa) trace ("Right");
else if(i < aa) trace ("Left");
if(j > bb) trace ("Bottom");
else if(j < bb) trace ("Top");
aa = i;
bb = j;
reDraw();
tileFound = true;
break;
}
}
if(tileFound) break;
}
var tileFound:Boolean=false;
对于(变量i:int=0;i<2;i++){
对于(var j:int=0;j<2;j++){
如果(平铺[i][j]==e.target){
tileFound=真;
瓷砖[aa][bb]=e.target;
瓦[i][j]=t4;
如果(i>aa)跟踪(“正确”);
如果(ibb)轨迹(“底部”);
如果(j
go()未定义…时间线脚本??所有这些代码都在第1帧下的时间线上。您必须提供该方法-它缺失。您是否有线路故障?我打赌该瓷砖[aa][bb+1]当bb+1大于或等于2时可能会出现问题。正如你所看到的,我有一个跟踪命令,告诉我bb和aa是什么,当彩虹在第一行时,它返回“0 0”,所以[aa][bb+1]等于[0][1],这是(至少我认为是)一个有效的语句?
var tileFound:Boolean = false;
for(var i:int = 0; i < 2; i++){
for(var j:int = 0; j < 2; j++){
if(tile[i][j] == e.target){
tileFound = true;
tile[aa][bb] = e.target;
tile[i][j] = t4;
if(i > aa) trace ("Right");
else if(i < aa) trace ("Left");
if(j > bb) trace ("Bottom");
else if(j < bb) trace ("Top");
aa = i;
bb = j;
reDraw();
tileFound = true;
break;
}
}
if(tileFound) break;
}