0

我正在尝试创建一个匹配游戏,其中数组中的一个对象与数组中hitBoxes的一个对象匹配hitBoxes2。我试图将实例名称转换为字符串,然后使用 substring 方法匹配实例名称中的最后一个数字,如果匹配则他们获胜。现在我收到错误

TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 MethodInfo-499()

我想知道是否有人可以帮助我。谢谢!

            var left:String;
            var correct:MovieClip = new Correct;
            var isClicked:Boolean = false;
            var leftClicked:int = 0;

            p3.nextPage.buttonMode = true;
            p3.nextPage.addEventListener(MouseEvent.CLICK, nextPage);

            function nextPage(MouseEvent):void{
                removeChild(p3);
            }

            var hitBoxes:Array = [p3.a1, p3.a2, p3.a3, p3.a4, p3.a5, p3.a6, p3.a7, p3.a8];
            var hitBoxes2:Array = [p3.b1, p3.b2, p3.b3, p3.b4, p3.b5, p3.b6, p3.b7, p3.b8];


            for (var h:int = 0; h < hitBoxes.length; h++){
                hitBoxes[h].buttonMode = true;
                hitBoxes[h].addEventListener(MouseEvent.CLICK, matchingLeft);
            }

            for (var h2:int = 0; h2 < hitBoxes2.length; h2++){
                hitBoxes2[h2].buttonMode = true;
                hitBoxes2[h2].addEventListener(MouseEvent.CLICK, matchingRight);
            }

            function matchingLeft(e:MouseEvent):void{
                var left = String(e.currentTarget.name);
                isClicked = true;
                trace(left);
            }

            function matchingRight(e:MouseEvent):void{
                var right:String = String(e.currentTarget.name);
                trace(right);
                if(isClicked == true && left.substring(3,3) == right.substring(3,3)){
                    trace("matched");
                }

            }
4

1 回答 1

2

根据您的代码变量“left”在matchingRight方法中为null,因为matchingLeft使用其名称为“left”的局部变量,而顶级“left”仍然具有其默认值。

也错误地使用了 String.substring 方法:

var name:String="p3.a1";
trace(name.substring(3, 3)); // this will always output empty string ""
trace(name.substring(4, 5)); // this will output "1" string

总之,我建议在计算“匹配”条件时使用数组索引(整数)而不是字符串,子字符串操作和字符串比较是 CPU 密集型的。

于 2012-12-05T19:48:56.010 回答