我写了一个包含一些变量的类:
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
但同样,你真的不应该公开声明你的变量并直接访问它们。