AS3。 EventListener.Click取决于位置

时间:2012-11-01 11:13:24

标签: actionscript-3 events click event-listener

我在AS3上做了一个由精灵制作的按钮(只是一个简单的方块)。当我添加事件监听器以使其充当按钮时它可以工作但是取决于button.x,所以当我把按钮放在我想要的按钮停止工作时。

由于

        public function pintaInterficieTrad(){

        while(numChildren != 0) removeChildAt(0);

        var idioma = new TextField();

        idioma.text=traductor.*[numTrad].*;
        idioma.width=200;
        idioma.selectable=false;
        idioma.setTextFormat(format);
        idioma.x=20;
        idioma.y=20;
        addChild(idioma);

        var trad = new Sprite();
        trad.graphics.lineStyle(5,0x00ff00);
        trad.graphics.beginFill(0x000000);
        trad.graphics.drawRect(300,20,150,70);
        addChild(trad);

        var textTrad = new TextField();

        if(numTrad==0) {
            textTrad.text="Traduir";
        }else{
            textTrad.text="Traducir";
        }

        textTrad.width=200;
        textTrad.selectable=false;
        textTrad.setTextFormat(format);
        textTrad.x=270;
        textTrad.y=40;
        addChild(textTrad);

        var getBack = new Sprite();
        getBack.graphics.lineStyle(5,0x00ff00);
        getBack.graphics.beginFill(0x000000);
        getBack.graphics.drawRect(500,20,150,70);
        addChild(getBack);

        var textgetBack = new TextField();
        if(numTrad==0) {
            textgetBack.text="Tornar";
        }else{
            textgetBack.text="Volver";
        }

        textgetBack.width=200;
        textgetBack.selectable=false;
        textgetBack.setTextFormat(format);
        textgetBack.x=470;
        textgetBack.y=40;
        addChild(textgetBack);

        trad.addEventListener(MouseEvent.CLICK,traduirBtn);
        getBack.addEventListener(MouseEvent.CLICK,tornarBtn);

        var userBox = new Sprite();
        userBox.graphics.lineStyle(2,0x00ff00);
        userBox.graphics.beginFill(0xffffff);
        userBox.graphics.drawRect(40,130,610,160);
        addChild(userBox);

        var tradBox = new Sprite();
        tradBox.graphics.lineStyle(2,0x00ff00);
        tradBox.graphics.beginFill(0xffffff);
        tradBox.graphics.drawRect(40,320,610,160);
        addChild(tradBox);      

        var formatTxt = new TextFormat();
        formatTxt.color=0x000000;
        formatTxt.size=14;


        var textUser = new TextField();
        var textTraduit = new TextField();

        textUser.defaultTextFormat=formatTxt;
        textUser.text = textUsuari;
        textUser.width = 600;
        textUser.height = 150;
        textUser.x=45;
        textUser.y=130;
        addChild(textUser);

        textTraduit.text = traduccio;
        textTraduit.setTextFormat(formatTxt);
        textTraduit.width = 600;
        textTraduit.height = 150;
        textTraduit.x=45;
        textTraduit.y=325;
        addChild(textTraduit);

    }

    public function traduirBtn(e){
        while(numChildren != 0) removeChildAt(0);
        tradueix();
        pintaInterficieTrad();
    }
    public function tornarBtn(e){
        while(numChildren != 0) removeChildAt(0);
        pintaMenu();
    }

}

如果我把正方形放在x = 0上,他们会做他们所做的事情......

2 个答案:

答案 0 :(得分:1)

看起来像你正在谈论的按钮是trad。你在代码中很早就addChild了,这意味着antoher displayobject可以在同一个位置上方。当您单击该位置时,click事件将仅发送到最顶层元素,因此请尝试添加您希望人们与之交互的元素作为最后一个(按钮,文本字段输入等)

答案 1 :(得分:0)

您的问题在于,您是在按钮上添加文本并单击文本,而不是按钮。

将文本添加到按钮本身,您的点击事件将起作用。

同时验证没有其他组件覆盖按钮。即使是透明的,也就像文本框一样。