actionscript-3 - 为什么actionscript3方法不识别诸如 button.X, 等属性的属性

  显示原文与译文双语对照的内容
128 2
  • 我有一个构造函数
  • 在那里我写了类似按钮。x=20 等等的属性
  • 但是我在同一个类中创建了另一个函数,我使用了诸如按钮button的属性,它们没有工作

错误为:


1120: Access of undefined property button.var posX:Number = (stage.stageWidth/2) - (button.width/2);
1120: Access of undefined property button.posY:Number = (stage.stageHeight/2) - (button.height/2);
1120: Access of undefined property button.button.x = posX;
1120: Access of undefined property button.button.y = posY;

这里文档类的代码为:


package
{
 import flash.text.TextField;
 import flash.display.Sprite;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.SimpleButton;
 import flash.display.MovieClip;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.display.DisplayObject;
 import flash.events.Event;
 import flash.display.StageScaleMode;
 import flash.display.StageAlign;

 public class main extends MovieClip
 {
function main()
{
 stage.addEventListener(Event.RESIZE, resizeHandler);
 stage.dispatchEvent(new Event(Event.RESIZE));
 stage.scaleMode = StageScaleMode.NO_SCALE;
 stage.align = StageAlign.TOP_LEFT;

 var button:graphic = new graphic();
 addChild(button);
 var field:type = new type();
 addChild(field);
}
function resizeHandler(event:Event):void
{
 var posX:Number = (stage.stageWidth/2) - (button.width/2);
 var posY:Number = (stage.stageHeight/2) - (button.height/2);

 button.x = posX;
 button.y = posY;
}
 }
}

我是新的编程,所以请解释一下什么是错误和什么是解决方案,这是正确的。

时间: 原作者:

143 1

问题是 button 是局部变量 inside main,不能用于 resize 。 要将按钮设置为类字段,或者更改 resize 以关闭按钮,必须更改按钮。

要使用类字段( 首选),请执行以下操作:


public class main extends MovieClip
{
 private var _button:Graphic;

 function main()
 {
 stage.addEventListener(Event.RESIZE, resizeHandler);
 stage.dispatchEvent(new Event(Event.RESIZE));
 stage.scaleMode = StageScaleMode.NO_SCALE;
 stage.align = StageAlign.TOP_LEFT;

 _button= new graphic();
 addChild(_button);
 var field:type = new type();
 addChild(field);
 }
 function resizeHandler(event:Event):void
 {
 var posX:Number = (stage.stageWidth/2) - (_button.width/2);
 var posY:Number = (stage.stageHeight/2) - (_button.height/2);

 _button.x = posX;
 _button.y = posY;
 }
}

要关闭按钮:


public class main extends MovieClip
{

 function main()
 {
 stage.addEventListener(Event.RESIZE, resizeHandler);
 stage.dispatchEvent(new Event(Event.RESIZE));
 stage.scaleMode = StageScaleMode.NO_SCALE;
 stage.align = StageAlign.TOP_LEFT;

 var button:graphic = new graphic();
 addChild(button);
 var field:type = new type();
 addChild(field);

 function resizeHandler(event:Event):void
 {
 var posX:Number = (stage.stageWidth/2) - (button.width/2);
 var posY:Number = (stage.stageHeight/2) - (button.height/2);

 button.x = posX;
 button.y = posY;
 }

 }

} 

原作者:
143 4

问题是 button 变量的范围

main 函数中声明变量后,它只能在函数的范围内识别。 resizeHandler 函数不知道名为'按钮'的变量的任何内容。

若要使该变量可以用于两个函数,你可以将它的范围更改为在整个 main 类中识别。 只需将变量声明移到 main 函数( 但仍然包含在) 之外。

...