RSS
 

Archive for the ‘flex’ Category

flexコンポーネントが重い

21 4月

mxmlで配置したImageコンポーネントを移動させると、かなり重い。
同じ画像でも、動的に作成したBitmapをCanvasにaddChildして動かすと
速さが全然違う。
性能のいいPCだと違いは分からないが、CPUの弱いPCだと顕著にわかる。

自分の環境で確認したところ、
Imageコンポーネントをひとつ動かすだけでも平均17fpsだったが、
Bitmapにすると設定通りの30fpsになった。
もちろん、Imageコンポーネントを動かさないで配置しているだけなら
全く問題はないようだ。
これは気を付けた方がいいかもしれない。

 
No Comments

Posted in flex

 

サウンドをループ

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