私のOOP構造を改良し、コードの表示を可能な限り直感的にするように努め、基本的なOOPプリンシパルを使用すると、これは間違いなく役立ちますが、私の技術はこれまでのところしか進んでいません。私は自分の練習を改善しようとしています:
package
{
import flash.display.*;
import flash.text.*;
public class Button extends Sprite
{
protected var _spr:Sprite = new Sprite();
protected var _tf :TextField = new TextField();
protected var c :Number;
protected var xx :Number;
protected var yy :Number;
protected var w :Number;
protected var h :Number;
protected var t :String;
protected var a :Number;
protected var l :Number;
protected var lC :Number;
function Button
(
_col:Number, //beginFill
_x:Number, _y:Number, _w:Number, _h:Number, //drawRect
_t:String = "", //TextField (optional)
_a:Number = 1, //beginFill (optional)
_l:Number = 0, _lC:Number = 0xFFFFFF //lineStyle (optional)
)
{
c = _col;
xx = _x;
yy = _y;
w = _w;
h = _h;
t = _t;
a = _a;
l = _l;
lC = _lC;
_spr.addChild(_tf);
draw();
}
public function draw ():void
{
_spr.graphics.clear ();
_spr.graphics.lineStyle(l, lC);
_spr.graphics.beginFill(c);
_spr.graphics.drawRect (xx, yy, w, h);
var f:TextFormat = new TextFormat;
f.font = "Arial";
_tf.text = t;
_tf.autoSize = TextFieldAutoSize.LEFT;
_tf.x = xx + w/2 - _tf.textWidth / 2;
_tf.y = yy + h/2 - _tf.textHeight / 1.5;
_tf.width = w - 2;
_tf.height = h - 2;
_tf.alpha = 0.75;
_tf.setTextFormat(f);
_tf.selectable = false;
_tf.mouseEnabled = false;
_spr.graphics.endFill ();
}
/* ----------------------- *
* GETTERS *
* ----------------------- */
//OVERRIDE
override public function get x () :Number {return (xx)}
override public function get y () :Number {return (yy)}
override public function get width () :Number {return (w)}
override public function get height () :Number {return (h)}
//SUPPLEMENTARY
public function get col () :Number {return (c)}
public function get text () :String {return (t)}
public function get line () :Number {return (l)}
public function get lineC () :Number {return (lC)}
public function get getObj () :Sprite {return (_spr)}
/* ----------------------- *
* SETTERS *
* ----------------------- */
//OVERRIDE
override public function set x (_n:Number) :void
{ xx = getObj.x = Math.round(_n - xx) }
override public function set y (_n:Number) :void
{ yy = getObj.y = Math.round(_n - yy) }
override public function set width (_n:Number) :void
{ w = Math.round(_n) }
override public function set height (_n:Number) :void
{ h = Math.round(_n) }
//SUPPLEMENTARY
public function set col (_n:Number) :void
{
c = _n;
draw();
}
public function set text (_s:String) :void
{
t = _s;
draw();
}
public function set line (_n:Number) :void
{
l = _n;
draw();
}
public function set lineC(_n:Number) :void
{
lC = _n;
draw();
}
}
}
上記のButtonクラスから、私の構造と組織についてどのような解釈ができますか?私は、OOPを論理的に実行する方法について多くの記事を読み、フォローしました。クラスがAS3でどのようにあるべきかについての私の理解ではなく、調整または批判の準備ができていると思います(状況に応じて)。
いくつかの具体的な質問:
メインクラスから「ボタン」をインスタンス化する場合、スーパーを使用して、そこのステージに追加する必要がありますか、それともボタンクラス自体に追加する必要がありますか?
「1047」エラーは修正されますか?ここですでに述べたもの以外の持続可能な(またはより効率的な)回避策は何ですか?: http: //curtismorley.com/2008/10/15/actionscript-error-1047-parameter-initializer-unknown-or-is- not-a-compile-time-constant /
幅/高さの変更を更新するには、特に幅と高さのオーバーライド関数の外部から変更した後、描画関数を呼び出す必要があります。オーバーライド関数を介してdraw()を呼び出す適切な方法はありますか?エラー出力は提供されませんでした。ルールに違反しているようですが、ハック修正としてMainからdraw()を呼び出しています。変更されたプロパティのイベントにテザーされたボタン内に関数を記述しますか?
誰かがこのテキストの壁を解析するのをわざわざした場合は、読んでくれてありがとう。厳しいかどうかにかかわらず、あなたが持っているかもしれない批判に感謝します:)