我刚刚开始在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";
}
}
}
}
答案 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是一个很好的做法,因此您可以立即在代码中看到什么是:)