2010年7月26日月曜日

Stringのlengthで全角を2文字として扱ってみる[AS3]

※注 - よくわかってないで記事書いてるので、いろいろ勘違いしているかも。突っ込み歓迎。

どうやらActionScript3のStringのlengthってマルチバイト文字も1として数えてるみたい。
今まで気にしてなかったけど、例えばPHPのstrlen関数はマルチバイト文字は2としているので、差異がある。

そこで、マルチバイト文字を2として数える方法ないかなーと思ったけど、見つからない。
というわけで、自分で作ってみた。
var str:String = "1@a $%&'=a ぁa←あア亜1@";
var reg:RegExp = new RegExp("[^ -~。-゚]", "g");
trace(str);
trace(str.length);
trace(str.match(reg));
trace(str.match(reg).length);
trace(str.length + str.match(reg).length);
実行結果
1@a $%&'=a ぁa←あア亜1@
19
 ,ぁ,a,←,あ,ア,亜,1,@
9
28
一応合ってる。

正規表現を使ってます。参考:ASCIIコード表
半角の文字以外にマッチする正規表現を作って、マッチした文字数を足してます。

2010年7月10日土曜日

AS3でイベントリスナーに引数を渡す

ActionScript3.0でイベントリスナーにイベント以外の引数を渡す方法。
自分は2つの方法を使ってます。てかそれ以外のやり方は知らない。
グローバル変数を増やしたくないときとかに使ってます。

クリック数をカウントするプログラム。
2つ目と3つ目は基本的にやってることは変わらないと思う。
// グローバル変数を使う
public class event extends Sprite
{
    private var a:int = 0;
    public function event()//constructor
    {
        stage.addEventListener(MouseEvent.CLICK, onClick);
    }

    private function onClick(e:MouseEvent):void
    {
         trace(++a);
    }
}
// Functionを返す関数を作る
public class event extends Sprite
{
    public function event()//constructor
    {
        var a:int = 0;
        stage.addEventListener(MouseEvent.CLICK, onClick(a));
    }

    private function onClick(a:int):Function
    {
        return function(e:MouseEvent):void
        {
            trace(++a);
        };
    }
}
// 無名関数使う
public class event extends Sprite
{
    public function event()//constructor
    {
        var a:int = 0;
        stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void
        {
            trace(++a);
        });
    }
}

2010年7月2日金曜日

TED

いまさらなんですが、以前見た動画を紹介。


このTEDってサイト面白いですよね。