RSS
 

Archive for 3月, 2008

サウンドをループ

06 3月

flexでサウンドをループする方法。
BGM等に使用したい場合。
あと、主に複数サウンドをならしたい時に
一つのリスナー関数で終わらしたい時の話。
Soundを再生する時、以下のようにチャンネルオブジェクトが出てくる。
その時そのチャンネルオブジェクトにイベントを設定。

var channel:SoundChannel = snd.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);

で、ぐぐっても出なかったしリファレンスにも
ちゃんとした情報が載っていなかったのだけど、
リスナーで受け取ったパラメータに、SoundChannelが割り当てられている。
なのでSoundとSoundChannelをなにかで結びつけて保存しておけば、
どのSoundが終了したのかを判別できる。

public function onSoundComplete(evt:Event):void
{
    for (var name:String in m_sounds)
    {
        if (m_sounds[name].channel == evt.target)
        {
            m_sounds[name].sound.play();
            break;
        }
    }
}
 
No Comments

Posted in flex

 

画像の回転

05 3月

flexでBitmapオブジェクトを回転させる際、
リファレンスを見るとrotaionというプロパティがあり、
それを変更することで簡単に回転が出来る。
が、よくよく見るとx=0, y=0の部分で回転しているため、
ちゃんと真ん中で回転してくれない。
リファレンスを見ると、その基準点を変更するための
プロパティも何も無いようだ。

色々調べていると、行列変換が使えることが分かった。
これで回転どころか何もかも好き勝手に出来る。
さすがflex。携帯のアプリとは違う。

具体的には、Bitmap.transform.matrixに
Matrixオブジェクトを代入しておけばよい。
行列を知らない人はなんのこっちゃと思うかもしれないが、
特に難しいことはない。

var matrix:Matrix = new Matrix();
matrix.rotate(angle);

という感じで何も分からなくても簡単に変換行列は作成できる。
で、具体的に回転させるのは、
まず基準点を画像の中心に合わせ、
それから回転、スケール変更を行い、
表示する位置に移動する、という作業。
内容的にはこれだけ。

var matrix:Matrix = new Matrix();
matrix.tx = -bitmap.bitmapData.width / 2;
matrix.ty = -bitmap.bitmapData.height / 2;
matrix.scale(scalex, scaley);
matrix.rotate(Math.PI * angle / 180);
matrix.tx += x;
matrix.ty += y;
bitmap.transform.matrix = matrix;
 
No Comments

Posted in flex