AS3でゲームを作っているのですが、非常に短時間で大量の弾丸を連続して発射する必要があります。たとえば、ある時点で、1〜5ミリ秒ごとに1発の弾丸を約1秒間発射する必要があります。ゲームは60FPSで(スムーズに)実行され、画面には約800以上のオブジェクトが表示されますが、タイマーは私のフレームレート(約16ミリ秒に1回)より速く刻むことができないようです。私はenterFrameを1つだけ実行しており、他のすべてがそこから更新されます。
任意のヒント?
AS3でゲームを作っているのですが、非常に短時間で大量の弾丸を連続して発射する必要があります。たとえば、ある時点で、1〜5ミリ秒ごとに1発の弾丸を約1秒間発射する必要があります。ゲームは60FPSで(スムーズに)実行され、画面には約800以上のオブジェクトが表示されますが、タイマーは私のフレームレート(約16ミリ秒に1回)より速く刻むことができないようです。私はenterFrameを1つだけ実行しており、他のすべてがそこから更新されます。
任意のヒント?
16ミリ秒はほぼ正しいように聞こえます...ドキュメントによると、 16.6秒以上の解像度があります。
delay:Number —タイマーイベント間の遅延(ミリ秒単位)。20ミリ秒未満の遅延は推奨されません。タイマーの頻度は1秒あたり60フレームに制限されています。つまり、16.6ミリ秒未満の遅延は、ランタイムの問題を引き起こします。
1秒間に必要な量のオブジェクトを取得するには、各ティックで異なるオフセットでx個のオブジェクト(弾丸)を画面外に作成することをお勧めします。これは、コンテキストによって画面外の敵が撃つことができることを前提としています。
どうすれば800以上のオブジェクトを画面に表示できますか?各オブジェクトは1ピクセルですか、それとも画面全体が塗りつぶされていますか?公平を期すために、目の前に1920x1080の画面があるので、各オブジェクトの幅は2ピクセル、高さは2ピクセルで、画面の幅全体を1600x1600で完全に埋めることはできません。私がゲーム開発を少しいじっているようなシナリオがなぜあるのか、私はただ興味があります。
技術的な質問については、期間が終了した直後(しばらくしてから)にタイマーがトリガーされるとは限りません。タイマーティックのコードの処理にどれだけ迅速に取り掛かることができるかによって異なります。私の推測では、非常に多くのオブジェクトがCPUを使い果たしています(* NIXシステムではコンソールでtopを使用して表示するか、Windowsではタスクマネージャーを使用してCPUのコアをピークにしていますか?)。これにより、おそらくそれを確認または拒否したり、オブジェクトの作成/更新をオフにして、タイマー自体が正しい速度で動作するかどうかを確認したりできます。いずれかが当てはまる場合は、CPUがピークアウトしていることを示しています。
Stage3Dを使用してオブジェクト描画をGPUにオフロードし、CPUを解放してタイマーを実行することを検討してください。また、flixelのような「ゲームフレームワーク」を検討してリソースを管理することもできますが、GPUを利用していることはわかりませんが、実際にはGoogleで検索して、それについて説明している興味深い投稿を見つけました。