243月/090
先日のリングコマンドの不具合について
どうにも気持ち悪かったんで、先日アップしたリングコマンドの不具合について調べてました。
どうやら、僕がUIComponentにBitmapをaddChildして使う際に行った実装がまずかったみたいです。
UIDecorator.as
-
public class UIDecorator extends UIComponent
-
{
-
public function UIDecorator(displayObject:DisplayObject)
-
{
-
super();
-
BindingUtils.bindSetter(bindCenter, this, "centerX");
-
BindingUtils.bindSetter(bindCenter, this, "centerY");
-
this.displayObject = displayObject;
-
super.addChild(this.displayObject);
-
}
-
-
[Bindable] public var centerX:Number = 0;
-
[Bindable] public var centerY:Number = 0;
-
-
private function bindCenter(dummy:Number):void
-
{
-
this.lx = this.lx;
-
this.ly = this.ly;
-
}
-
-
[Bindable]
-
public function get lx():Number
-
{
-
return super.x + centerX;
-
}
-
public function set lx(value:Number):void
-
{
-
super.x = value - centerX;
-
}
-
-
[Bindable]
-
public function get ly():Number
-
{
-
return super.y + centerY;
-
}
-
public function set ly(value:Number):void
-
{
-
super.y = value - centerY;
-
}
-
-
public override function set width(value:Number):void
-
{
-
super.width = value;
-
displayObject.width = value;
-
}
-
public override function set height(value:Number):void
-
{
-
super.height = value;
-
displayObject.height = value;
-
}
-
-
public var displayObject:DisplayObject;
-
}
こんな感じに実装してみた。
これは正解のソースで、本当はコンストラクタの中でdisplayObjectの幅と高さをthisの幅と高さにバインドする処理が入ってました。
で、このバインドを信用していたんだけど、どうもビルドするたびに、このバインドが利いたり利かなかったり・・・。
もう、なんでこんな曖昧なんだ。。バインド。。一気に僕の信用を落としました。
さて、で、これではBitmapをまだaddChildしてないので、ちゃんとBitmapをaddChildするようにコレを継承して、こんなのを作りました。
UIBitmap.as
-
public class UIBitmap extends UIDecorator
-
{
-
private var _bitmap:Bitmap;
-
public function UIBitmap(bitmapData:BitmapData=null)
-
{
-
super(new Bitmap());
-
_bitmap = this.displayObject as Bitmap;
-
this.bitmapData = bitmapData;
-
}
-
-
public function set bitmapData(value:BitmapData):void
-
{
-
_bitmap.bitmapData = value;
-
if (value == null)
-
return;
-
this.width = value.width;
-
this.height = value.height;
-
}
-
public function get bitmap():Bitmap
-
{
-
return _bitmap;
-
}
-
}
このソースも正解のソース。
本当はbitmapDataのsetterの中でthisの幅と高さを入れる処理はしてなかった。
まあ、つまり、UIComponentに入れたBitmapのサイズがバインド処理で行うはずなのに行われてなかったというものでした。
おわり。
明日は、MXMLで書くXMLパーサを作った話を書く予定。