2012-10-05 113 views
0

我寫這包含幾個變量都類:類變量 - AS3 getter和setter

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; 

科學家正在運行,但它沒有看到這些變量的變化。我認爲這是一個簡單的問題,但我無法解決它。

回答

2

你想要什麼是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 = [...]; 
+0

doh!我幾乎完成了寫完全相同的事情 – Ronnie

0

不應該有任何理由修改公共變量是行不通的(即使你should't做到這一點)。這聽起來更像是你的更新循環沒有做你期望的?

如果我粘貼代碼,並做到以下幾點,它作爲預期:

代碼:

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

輸出:

>> mRotate: 0 
>> mRotate: 5 

但同樣,你真的不應該公開你的變量並直接訪問它們。