按钮在AS3中不起作用/无法正常工作

时间:2018-12-18 12:37:55

标签: actionscript-3

我只会在我的代码有问题的情况下使用。我不认为我在部分代码中出了差错,但是当我运行它时,阶段中的至少一个按钮将无法按预期工作。
这是我的代码:

`public function Untitled()
        {
            // constructor code
            init();
        }

        function init():void
        {
            BP = new Array  ;
            RP = new Array  ;
            SP = new Array  ;

            BP2 = new BTB();
            BP2.x = 280;
            BP2.y = 360;
            BP.push(BP2);
            addChild(BP2);

            BP3 = new BTB();
            BP3.x = 360;
            BP3.y = 440;
            BP.push(BP3);
            addChild(BP3);

            RP3 = new BTR  ;
            RP3.x = 280;
            RP3.y = 200;
            RP.push(RP3);
            addChild(RP3);

            RP2 = new BTR;
            RP2.x = 360;
            RP2.y = 280;
            RP.push(RP2);
            addChild(RP2);

            OLL = new OUTLINE  ;
            OLR = new OUTLINE  ;

            for (var a:int = 0; a<BP.length; a++)
            {
                BP[a].addEventListener(MouseEvent.CLICK, SELB);
            }

            for (var d:int = 0; d<RP.length; d++)
            {
                RP[d].addEventListener(MouseEvent.CLICK, SELR);
            }
        }

        //SELECTION FOR BLUE
        function SELB(e:MouseEvent)
        {
            CPB = new Point(e.currentTarget.x,e.currentTarget.y);
            SP.push(e.currentTarget);

            OLL.x = (CPB.x - 80);
            OLL.y = (CPB.y - 80);

            OLR.x = (CPB.x + 80);
            OLR.y = (CPB.y - 80);

            addChild(OLR);
            addChild(OLL);

            OLL.addEventListener(MouseEvent.CLICK, MLB);
            OLR.addEventListener(MouseEvent.CLICK, MRB);
        }

        function MLB(e:MouseEvent)
        {
            for (var b:int = 0; b<SP.length; b++)
            {
                SP[b].x = OLL.x;
                SP[b].y = OLL.y;

                removeChild(OLL);
                removeChild(OLR);

                if (SP[b].hitTestObject(BP3 || BP1 || BP4))
                {
                    SP[b].x = CPB.x;
                    SP[b].y = CPB.y;
                    SP.splice(b, 1);
                }
                else
                {
                    SP.splice(b, 1);
                }
            }
        }

        function MRB(e:MouseEvent)
        {
            for (var c:int = 0; c<SP.length; c++)
            {
                SP[c].x = OLR.x;
                SP[c].y = OLR.y;

                removeChild(OLL);
                removeChild(OLR);

                if (SP[c].hitTestObject(BP3 || BP1 || BP4))
                {
                    SP[c].x = CPB.x;
                    SP[c].y = CPB.y;
                    SP.splice(c, 1);
                }
                else
                {
                    SP.splice(c, 1);
                }
            }
        }


        //SELECTION FOR RED
        function SELR(e:MouseEvent)
        {
            CPR = new Point(e.currentTarget.x,e.currentTarget.y);
            SP.push(e.currentTarget);

            OLL.x = (CPR.x - 80);
            OLL.y = (CPR.y + 80);

            OLR.x = (CPR.x + 80);
            OLR.y = (CPR.y + 80);

            addChild(OLL);
            addChild(OLR);

            OLL.addEventListener(MouseEvent.CLICK, MLR);
            OLR.addEventListener(MouseEvent.CLICK, MRR);
        }

        function MLR(e:MouseEvent)
        {
            for (var f:int = 0; f<SP.length; f++)
            {
                SP[f].x = OLL.x;
                SP[f].y = OLR.y;

                removeChild(OLL);
                removeChild(OLR);

                if (SP[f].hitTestObject(RP1 || RP2))
                {
                    SP[f].x = CPR.x;
                    SP[f].y = CPR.y;
                    SP.splice(f, 1);
                }
                else
                {
                    SP.splice(f, 1);
                }
            }
        }

        function MRR(e:MouseEvent)
        {
            for (var g:int = 0; g<SP.length; g++)
            {
                SP[g].x = OLR.x;
                SP[g].y = OLR.y;

                removeChild(OLL);
                removeChild(OLR);

                if (SP[g].hitTestObject(RP1 || RP2))
                {
                    SP[g].x = CPR.x;
                    SP[g].y = CPR.y;
                    SP.splice(g, 1);
                }
                else
                {
                    SP.splice(g, 1);
                }
            }
        }`

BP,RP,OLL和OLR都是按钮。我将它们设置为按钮而不是影片剪辑,因为它更便于选择和取消选择。并且使用了数组,因此我不会有太长的代码。
代码应该做的是,当我单击一个按钮时,两个轮廓(OLL和OLR)将出现在按钮的左上,右上或左下和右上。然后,当我单击这些轮廓之一时,该按钮将转到该轮廓,并且两个轮廓都将消失(removeChild)。另外,按钮不应堆叠在一起,因此我将它们发送回其最后一个已知位置。

我遇到的问题是,至少有一个按钮将无法正常工作(它将不会移至所选位置,但会显示轮廓)。我试图更改按钮的名称,并且发生相同的问题。我不知道这是我的代码中的错误还是该错误是完全随机的。我只想知道我的代码中是否存在导致这些错误的部分。

0 个答案:

没有答案