Actionscript 3 TypeError:Error#2007:参数hitTestObject必须为非null。单击事件时出错 功能检查板(abc:MovieClip)/:编号 { var TARGETARY:阵列=新阵列(T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、, T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27, T28、T29、T30、T31、T32、T33、T34、T35、T36、T37、T38、T39、T40、T41、T42、, T43、T44、T45、T46、T47、T48、T49、T50、T51、T52、T53、T54、T55、T56、T57、T58、, T59、T60、T61、T62、T63、T64); 变黑:阵列=新阵列(B1、B2、B3、B4、B5、B6、B7、B8、B9、B10、B11、B12、B13、B14、B15、B16); 变量红色:数组=新数组(R1、R2、R3、R4、R5、R6、R7、R8、R9、R10、R11、R12、R13、R14、R15、R16); //变量属性:数组=新数组(0); //var legal:Array=(targetarray,properties); 变量i:数值=0; 变量j:数值=0; var loh:数字; 对于(i=0;i18){ j=18; }否则{ j++; } } }

Actionscript 3 TypeError:Error#2007:参数hitTestObject必须为非null。单击事件时出错 功能检查板(abc:MovieClip)/:编号 { var TARGETARY:阵列=新阵列(T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、, T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27, T28、T29、T30、T31、T32、T33、T34、T35、T36、T37、T38、T39、T40、T41、T42、, T43、T44、T45、T46、T47、T48、T49、T50、T51、T52、T53、T54、T55、T56、T57、T58、, T59、T60、T61、T62、T63、T64); 变黑:阵列=新阵列(B1、B2、B3、B4、B5、B6、B7、B8、B9、B10、B11、B12、B13、B14、B15、B16); 变量红色:数组=新数组(R1、R2、R3、R4、R5、R6、R7、R8、R9、R10、R11、R12、R13、R14、R15、R16); //变量属性:数组=新数组(0); //var legal:Array=(targetarray,properties); 变量i:数值=0; 变量j:数值=0; var loh:数字; 对于(i=0;i18){ j=18; }否则{ j++; } } },actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,这是导致错误的函数,它似乎位于这一行if(targetarray[i].hitTestObject(black[j]) 然而,我不明白为什么这不起作用,B[j]片段是电影剪辑,t[I]电影剪辑是允许黑色棋盘在棋盘上移动的地方 有人能帮我解决这个问题吗?你的问题是你的黑色数组中有16个元素,但是你允许你的jvar上升到18。因此,在for循环中,当执行black[j]时,当j的值为16、17或18时,它将是未定义的 编写此代码的更安全方法如下: function checkboard(abc:Mo

这是导致错误的函数,它似乎位于这一行
if(targetarray[i].hitTestObject(black[j])

然而,我不明白为什么这不起作用,
B[j]
片段是电影剪辑,
t[I]
电影剪辑是允许黑色棋盘在棋盘上移动的地方


有人能帮我解决这个问题吗?

你的问题是你的
黑色数组中有16个元素,但是你允许你的
j
var上升到
18
。因此,在for循环中,当执行
black[j]
时,当
j
的值为
16
17
18
时,它将是
未定义的

编写此代码的更安全方法如下:

function checkboard(abc:MovieClip)//:Number 
{
    var targetarray:Array= new Array (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
                            T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
                            T28, T29, T30, T31, T32, T33, T34, T35, T36,T37,T38,T39,T40,T41,T42,
                            T43,T44,T45,T46,T47,T48,T49,T50,T51,T52,T53,T54,T55,T56,T57,T58,
                            T59,T60,T61,T62,T63,T64);
    var black:Array= new Array (B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16);
    var red:Array= new Array (R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16);
    //var propertiess:Array = new Array (0);
    //var legal:Array =(targetarray,propertiess);
    var i:Number = 0;
    var j:Number=0;

    var loh:Number;
    for (i=0;i<64;i++)
    {
        if(targetarray[i].hitTestObject(black[j]))
        {
        trace("black peice on ",targetarray[i+1]);
        }
        if(j>18){
            j=18;
        }else{
        j++;
        }

    }
}
//使用targetArray.length仅循环数组中的项数

对于(i=0;iI)诊断这样的问题很容易。将跟踪(i,j);放在错误行之前,这样您就可以知道产生错误的i和j的值。@Organi错误甚至不允许我跟踪任何东西,现在我看到了错误,我明白了为什么要感谢您了W,您破坏了我如何跟踪这样一个问题的教学(t\t)@你真的应该把答案作为答案,而不是评论。“评论是为了要求澄清,留下建设性的批评,或者添加相关但次要的附加信息”()。在评论中回答也会产生没有公认答案的问题,这会给那些渴望帮助的人制造噪音,他们最终会发现自己的答案已经含糊不清,从而浪费时间。@A没错,但我的评论不是答案。这是一种教育性的推动。当答案内容丰富且有用时,我会将其作为答案。谢谢但是你的担心。非常感谢你,实际错误的原因是我的forloop在63停止时将变为64,仍然习惯于AS3。这是我第一次尝试。再次感谢!正如你的问题中所写的,你的for loop将在63停止,但你在其中做了i+1,因此值为64。很高兴你能把一切都搞定了!
 //use targetArray.length to only loop to the amount of items in the array
 for(i=0;i<targetArray.length;i++){
    if(targetarray[i].hitTestObject(black[j]))
    {
        //not sure why you're adding 1 here?  This would be null if 'i' is the last number in the loop
        //remember, arrays are 0 based, so `T1` is actually targetArray[0]
        trace("black peice on ",targetarray[i+1]);
    }

    //only increment j if the result is still less than the length of black array.
    if(j < black.length - 1){
        j++;
    }
 }