0

私はいくつかのvariabesを含むクラスを書きました:

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は実行されていますが、これらの変数の変更は認識されません。簡単な問題だと思いますが、解決できません。

4

2 に答える 2

2

必要なのは、クラス内のセッター関数とゲッター関数です: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 = [...];
于 2012-10-05T23:09:29.013 に答える
0

パブリック変数の変更が機能しない理由はありません(実行すべきではありませんが)。更新ループが期待どおりに動作していないように聞こえますか?

コードを貼り付けて次のようにすると、期待どおりに機能します。

コード:

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

出力:

>> mRotate: 0
>> mRotate: 5

しかし、繰り返しになりますが、変数をパブリックとして宣言して直接アクセスするべきではありません。

于 2012-10-06T08:41:19.147 に答える