2010年5月3日月曜日

ActionScript | AsWing ASColor型

AsWingの充実振りには楽しくなってきますが、JavaのSwingにならっているのか、ActionScriptのデータ型と組み合わせるといくらか使いにくい点があるように思いました。
中でも色を扱うASColor型、これはよくできていますけど、ActionScriptのTextFieldなどとはデータ型が異なるので色データの行き来が不便です。 
たとえば左図の場合はAsWingのコンポーネントのカラーをActionScriptのTextFieldのカラーに渡したいと言う場合です。




ASColorはASColor(rgb:unit=0x000000,alpha:Number=1)、対してActionScriptにはcolor型は無く、Numberに16進数0x000000の形式で入力すればよいことになっています。
やり方はスマートではないですが、文字列の置換を使ってデータを変換する関数はたとえば次のようなものになります。

【ASColor型を扱うFunction】
public function RGB(color:ASColor):int {
//ASColor(rgb:73aa95, alpha:1)のrgbの部分だけを16進数int(0xRRGGBB)形式で返す。
    var str:String = String(color);
    var reg:RegExp = /ASColor\(rgb\:(?)/g;//先頭部分の"ASColor(rgb:"を除去
    str = str.replace(reg, "");
    var a:Array = str.split(",");
    var sR:String = "0x" + a[0];
    return int(sR);
}
public function ASC(colorStr:String):ASColor{
//文字列"ASColor(rgb:73aa95, alpha:1)"をASColor型で返す。
    var asc:ASColor;
    var str:String = String(colorStr);
    var reg:RegExp = /ASColor\(rgb\:(?)/g;//先頭部分の"ASColor(rgb:"を除去
    str = str.replace(reg, "");
    reg = /\)\:(?)/g;//先頭部分の")"を除去
    str = str.replace(reg, "");
    reg = / alpha\:(?)/g;//先頭部分の"alpha:"を除去
    str = str.replace(reg, "");
    reg = /\)(?)/g;//先頭部分の")"を除去
    str = str.replace(reg, "");
    var a:Array = str.split(",");
    var sR:Number = new Number("0x" + a[0]);
    asc = new ASColor(sR,a[1]);
    return asc;
}

制作・©:のぼる/N.Lab