单击AS3提交用户输入

时间:2017-03-15 07:51:55

标签: actionscript-3 button input user-input

我刚刚开始在AS3编码冒险。  我希望通过点击按钮来学习如何提交我的输入,并检查它是否与我的密码相同"数。然后,在动态字段中显示有关结果的消息。 我写了一些代码并没有显示任何错误,但是 - 正如你猜测的那样 - 它也不起作用。

我以为使用命令 button.addEventListener(MouseEvent.CLICK,handleClick); 然后创建一个简单的if ... else语句就足够了,但不知何故它不起作用。

请您查看我的代码并指出导致我痛苦的错误?

这是代码:

    private var Input:Object;
    private var Output:Object;
    private var yournr:String;
    public function Tehtava25a()
    {
        var Input:TextField = new TextField();
        var Output:TextField = new TextField();
        var initialtxt:String = "Give me the password";

        Input.type = TextFieldType.INPUT;
        Input.border = true;
        Input.width = 200;
        Input.height = 200;
        Input.backgroundColor=0xFFFF99;
        Input.background =true;
        Input.borderColor=0x006666;
        addChild(Input);

        Output.type = TextFieldType.DYNAMIC;
        Output.text=  initialtxt;
        Output.background = true;
        Output.border = true;
        Output.backgroundColor=0xFFFF99;
        Output.background =true;
        Output.borderColor=0x006666;
        Output.width = 200;
        Output.height = 200;
        Output.x = 200;
        addChild(Output);   
        var button:SimpleButton = new SimpleButton();
        button.x = 250;
        button.y = 250;

        button.upState = createCircle( 0x00FF00, 15 );
        button.overState = createCircle( 0xFFFFFF, 16 );
        button.downState = createCircle( 0xCCCCCC, 15 );
        addChild( button );
        button.hitTestState = createCircle( 0x000000, 50 );

        button.addEventListener(MouseEvent.CLICK, handleClick , false, 0, true);


    }

    private function createCircle(param0:Number, param1:int):DisplayObject
    {var circle:Shape = new Shape(  );
        circle.graphics.lineStyle( 1, 0x000000 );
        circle.graphics.beginFill( 0xFF794B );
        circle.graphics.drawCircle( 0, 0, 30 );
        circle.graphics.endFill(  );
        return circle;
    }

    protected function handleClick(event:MouseEvent):void
    {var yournr:String = Input.text;
    var mynr:String = "1234";
        if (yournr == mynr){
            Output.appendText = "the number is correct"}
        else { Output.appendText = "try again";
        }
    }   
     }
    }

2 个答案:

答案 0 :(得分:0)

TextFiels.appendText(...)是一个方法,而不是属性。您可以将其用作以下内容:

protected function handleClick(event:MouseEvent):void
{
    var yournr:String = Input.text;
    var mynr:String = "1234";

    if (yournr == mynr)
    {
        Output.appendText("the number is correct");
    }
    else
    {
        Output.appendText("try again");
    }
}

如果您不想附加文本,而是将给定文本放入文本字​​段,则需要指定其.text属性:

protected function handleClick(event:MouseEvent):void
{
    var yournr:String = Input.text;
    var mynr:String = "1234";

    if (yournr == mynr)
    {
        Output.text = "the number is correct";
    }
    else
    {
        Output.text = "try again";
    }
}

答案 1 :(得分:0)

我认为您的问题是代码顶部的本地属性混合

private var Input:Object;
private var Output:Object;

和类构造函数中的局部变量

var Input:TextField = new TextField();
var Output:TextField = new TextField();

当你在一个方法(在你的情况下是类构造函数)中用“var”声明某些东西时,它只能在这个方法中访问,而不能通过其他方法访问。因此,您在构造函数中创建文本字段,但handleClick正在处理您在代码顶部声明的变量(使用私有var ...)。

换句话说,代码的开头应如下所示:

 private var Input:TextField;
 private var Output:TextField;
 private var yournr:String;

 public function Tehtava25a()
 {
     //this will refer to the variables above and not local ones
     Input = new TextField();
     Output = new TextField();

使用大写字母启动变量是一种不好的做法,在Adobe常见做法中,变量是camelcase并以小写字母开头,类以大写字母开头。通常,将变量命名为outputTextField是一个很好的做法,因此您可以立即在代码中看到什么是:)