先日のリングコマンドの不具合について
どうにも気持ち悪かったんで、先日アップしたリングコマンドの不具合について調べてました。
どうやら、僕が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パーサを作った話を書く予定。
べ、別に俺、ツンデレとか好きじゃねえし!
今日というか、日付的には昨日ですね。
やったことといえば、PostgreSQLとの熾烈な戦いです。
もともと、プロジェクト管理ソフトの9arrowsを試してみたかったんですよ。
プロジェクト管理というか、タスク管理というか、そんなソフトを後に作りたくて。
なんですが、この9arrowsを実行する環境づくりにめっさ足を取られて、ちょっと軽い気持ちで試すつもりが一日潰すという…。
とても熾烈な戦いだったため、記憶の一部が欠落しております。
本当は、このブログにログを残すつもりでしたが、色んな事やったのでどれが正しかったのか正直謎です。
色んなサイトを見ながらやって、Ruby on RailsとかRubyGemsとかRubyのPostgreSQLのアダプタとかはすんなりインストールできたんですよ。
ただ、PostgreSQLを運用するためのphpPgAdminとPostgreSQLの設定にすごいてこずりました。
phpPgAdminのページに接続してもデータベースに繋げられない模様。ログインしようとしても失敗する。
ちゃんとIDもパスワードも合っているのに失敗する。そんな現象です。
以前、phpMyAdminとMySQLはすんなり入ったので、そのノリでやってたら、全然だめ。
どうもキモとなる設定がここらへん。
- phpPgAdmin/conf/config.inc.phpの設定
- $conf['servers'][0]['host'] の部分(ドメイン名かIPを設定、ローカルの場合はlocalhost)
- $conf['extra_login_security'] = true の部分(true -> falseに変える)
- PostgreSQLの設定
- pg_hba.confの設定
- 認証モードをidentでなく他のもの(passwordとか)にする
- pg_hba.confの設定
ここらへんを気をつけてやれば、きっと上手く行きます。
もしも、設定が上手く行かなくて、検索したらこんなブログに引っかかってしまった、そこの君。
ここら辺を気をつけましょう。
そんなわけで、ひまころじーV2というプロジェクトは、今日はあまり進んでないのです。
Soundクラスを拡張するクラスであるBGMクラスを作って、ループ再生ができるようになったのと、BGMのフェードアウトをTweenerを使ってできるようにしたくらい。
ちゃんと聴覚特性を考慮して、フェードを指数関数的に音量を下げるようにしてみた。それが正しいかどうかはさておき。どうなんだろう?
Tweener便利だね。動作比較の上では遅いらしいけど。(比較サイトの所在を忘れてしまったのでリンクが見つかりませんが、速度比較を行っている方がいました
書いてみて気づいたけど、フェードインも作らなきゃね。考えてなかったけど。
ファイルのロードなんかを最近作っているんだけど、ActionScriptでThreadを使えるようにする、ActionScript Thread Library 1.0 (そうめん)ってライブラリがあるらしく、このライブラリを使うともっと簡単に実装ができそうなので検討中。
さて、今日はそんなとこです。今週中にはファイルのロードやらを完成させたい。進捗表示も頑張って作るぞ。