我写了一个包含一些变量的类:
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正在运行,但它没有看到这些变量的变化。我认为这是一个简单的问题,但我无法解决它。
答案 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
但是,你真的不应该公开你的变量并直接访问它们。