在类 ActionScript 3.0 - AS3 getter 和 seters 外部使用的类变量



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

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 正在运行,但它没有看到这些变量的变化。我认为这是一个简单的问题,但我无法解决它。

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

然后,在每个二传手中,当变量发生变化时,您需要实际做一些事情。

试试这个

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 = [...];

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

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

法典:

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

输出:

>> mRotate: 0
>> mRotate: 5

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

最新更新