ASOK?
ActionScriptでFlashつくるよ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
page top

BitmapData.copyPixels()で描画するとき、クリップ処理が入ってるらしくターゲットBitmapDataの外側に描画する場合は処理が軽くなる。当たり前か。

  • 描画パフォーマンスは、実際の描画面積に比例する(ようだ)。
  • gifよりpngの方が早い。
  • mergeAlphaパラーメタは(意外にも)ほとんど影響を与えない。
  • if文によるクリップはパフォーマンス向上の可能性あり。
  • Rectangle.intersection()によるクリップはむしろ遅くなる。

以下実験結果。

つづきを表示
スポンサーサイト
page top

この記事は調べ物の途中です。

Flashには時間関係のイベント、メソッドなどが複数存在する。
またFlashの時間計測があまり正確でないことは、昔から知られている。
なるべく正確に時間を測るにはどうするべきか。

時間を測る手段

  • Event.ENTER_FRAMEイベント
  • flash.utils.Timerクラス
  • flash.utils.getTimer()関数
  • Dateクラス
  • SoundChannel.position

ざっと思いつくだけでもこんぐらい。

テキトーな実験

SoundChannle.positionとgetTimer()とnew Date()を比較してみたら、

  • SoundChannle.positionとgetTimer()はわりと近い
  • SoundChannle.positionとnew Date()は、フラフラしている

CorrectTimer クラス

大量のTIMERイベントを発行する処理の場合Timerクラスよりも精度の高い時間計測が可能

CorrectTimer - Spark project

ソースをちょっと覗いてみたら、SoundのSampleDataEventを利用してるようです。

いい加減に結論

なので多分、Soundがわりと正確なんじゃないでしょうか。

page top
  • 当然WAVのほうがファイルサイズが大きい
  • 再生時の消費メモリはMP3のほうが小さいみたい
  • 再生負荷はWAVのほうが小さい(はず)

再生負荷実験

6チャンネル+テキトーな計算負荷

WAV:
20fps 50前後msec/frame 15.3MB
MP3:
19fps 50前後msec/frame 4.1MB

⇒再生負荷はほとんど変わらない。

6×5=30チャンネル

WAV:
100fps 10前後msec/frame 15.7MB
MP3:
90fps 10前後msec/frame 6.6MB
(ループ時にfpsが70ぐらいまで落ちる)
ADPCM:
100fps 10前後msec/frame 10.2MB
(ループ時もfpsは落ちない)

MP3の特徴

  • ループ時に一時的に負荷が高まる。(上の例ではfpsが70ぐらいまで落ちる)
    ⇒ループのたびにデコードしている?
  • 30チャンネル分を同時にplay()しているのに、タイミングがずれる
    ⇒デコード負荷のせいか?

ADPCMの特徴

  • ループ時も負荷が変わらない(ようだ)
  • 30チャンネル分同時にplay()しても、タイミングずれない

使ったことなかったけど意外と使えるかも。MP3とWAVの中間的特徴。
サンプルレートを落とすと、高音が出なくなり音質が変わる。あまり落とさないほうがいい。
ADPCMビットは、2ビットまで下げても音質に(そんなに)変化がない

page top

基本

サウンドファイルをFLAに埋め込む場合

再生前に、ボリュームやパン等の効果を付けたい場合はSoundTransformでパラメータを指定します。
再生中に、ボリュームやパン等の効果を付けたい場合はSoundChannelでパラメータを指定します。
⇒なんで2つに分かれてるんだ!めんどくせ。

停止中も、SoundChannelに対するボリュームやパン等の操作は有効なようだ。
⇒勘違いでした。SoundTransformを保存しておいて、Sound.play()の引数に渡すようにすれば実現できる。

パブリッシュを高速化したい

  1. FLAにサウンドを読み込み、リンケージ設定
  2. サウンド保持用のMCをつくり、タイムラインにサウンドを埋め込む
  3. 上記MCをコンパイルされたクリップに変換

サウンドの外部ファイル化

サウンドを外部ファイル化したい場合、MP3しか読み込めない。
が、Player10以降なら、バイナリ扱いしてデコードできる。

ループ再生

サウンド関連のイベント

意外と少ない。

Sound

complete
データが正常にロードされたときに送出されます。
id3
MP3 サウンドで ID3 データを使用できる場合に、Sound オブジェクトによって送出されます。
ioError
入出力エラーが発生してロード操作が失敗したときに送出されます。
open
ロード操作が開始したときに送出されます。
progress
ロード処理を実行中にデータを受信したときに送出されます。

SoundChannel

soundComplete
サウンドの再生が終了したときに送出されます。

ループ再生時に、ループしたタイミングを知る手段がない予感。
SoundChannel.positionとSound.lengthを比較することでできるかな?
⇒↑これでいける。40分ぐらいまわしてずれなかったので、たぶん大丈夫。

page top
CEDEC記事、最後に面白い記事が出てきた。

4Gamer.net ― [CEDEC 2010]ネットゲームの裏で何が起こっているのか。ネットワークエンジニアから見た,ゲームデザインの大原則

ネットゲームでのネットワークまわりの実装と、ゲームデザインによる解決。
最後のPSOの段は、かつてプレイしてたので興味深かった。やっと謎が解けた気がする。

格闘ゲームの場合―― 完全同期型/キー入力同期方式
RTSの場合 ――完全同期型/コマンド入力同期方式
FPSの場合 ――非同期型/サーバー集中処理型
PSO/PSUの場合 ――非同期型/クライアント分散処理型
page top
Copyright © 2005 ASOK?. all rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。