在ActionScript 3.0类之外使用的类变量 - AS3 Getter和Setter

时间:2012-10-05 22:22:38

标签: actionscript-3 adobe flash-cs5

我写了一个包含一些变量的类:

public class myButton extends Sprite{
    private var button:Sprite = new Sprite();
    public var Colors:Array;
    public var gType:String = GradientType.LINEAR;
    public var mRotate:Number = 0;
    ...
}

我想在主文件中编辑这些变量:

var btn:myButton = new myButton();
btn.Colors = [0xFFFFFF, 0xFFFF00];
btn.mRotate = Math.PI/2;

sciript正在运行,但它没有看到这些变量的变化。我认为这是一个简单的问题,但我无法解决它。

2 个答案:

答案 0 :(得分:2)

你想要的是你班级中的setter和getter函数: http://en.wikipedia.org/wiki/Mutator_method#Actionscript_3.0_example

然后,在每个setter中,当变量发生变化时,您需要实际执行某些操作。

试试这个

public class myButton extends Sprite{
    //....
    //note the change to private, common practice is to use lowercase first names in vars 
    //and include _ in front of private vars 
    private var _colors:Array;
    private var _mRotate:Number = 0;
    //...

    //getter and setter for _colors
    public function set colors(value:Array):void{
          _colors = value;
          var ct:ColorTransform = this.transform.colorTransform;
          ct.color = _colors[0]; //for simplicity I use only 1 color
          this.transform.colorTransform = ct;
    }

    public function get colors():Array{
         return _colors;
    }

    //do the same for mRotate but use the Number type

}

这将允许你做

 var btn:MyBtn = new MyBtn();
 btn.colors = [...];

答案 1 :(得分:0)

没有理由认为修改公共变量不起作用(即使你不应该这样做)。听起来更像是你的更新循环没有做你期望的那样?

如果我粘贴您的代码并执行以下操作,则会按预期运行:

代码:

import MyButton;
var btn = new MyButton();
trace(">> mRotate: " + btn.mRotate); 
btn.mRotate = 5;
trace(">> mRotate: " + btn.mRotate);

输出:

>> mRotate: 0
>> mRotate: 5

但是,你真的不应该公开你的变量并直接访问它们。