5

非常に便利なビギナーズ チュートリアルを実行しました。http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.phpそして結果にかなり満足しています。

ただし、効果音に 3 つの .wav ファイルを使用すると、ゲームの速度が大幅に低下することに気付き、次のコードを適用しました。

if (keybState.IsKeyDown(Keys.Enter) || keybState.IsKeyDown(Keys.Space))
        {
            if (!rocketFlying) launch.Play();
            rocketFlying = true;    
            ...
         }

これは、ボタンが押されたときに起動サウンドエフェクトを再生します。更新メソッドはこれを 1 秒間に 60 回チェックしますが、ボタンをすばやく押すのは難しいため、1 回だけ再生するようになりました。

ただし、それでもゲームの速度が大幅に低下します。これは明らかに理想的ではありません。

明らかに、私はこの特定のゲームで何もしようとはしていませんが、将来のプロジェクトのためにこの問題を解決する方法を知りたいと思っています。

乾杯ライアン

4

1 に答える 1

0

ここに問題があります。たとえば、60 fps で実行しているとします。キーを 1 秒間押し続けると、効果音が 60 回鳴ります (.IsKeyDown のみをチェックしていることに注意してください。一度だけチェックするために、キーが押されたかどうかではなく、押されたかどうかをチェックする必要があります)。

したがって、いくつかの解決策があります。

1)最初のプレスでのみ放出します

2) xact プロジェクトに移動し、キューまたはカテゴリの最大インスタンスを妥当なものに制限します (最も古いものを置き換えるを使用して、3 が適切な数です)。

#1 を実行したくなるかもしれませんが、最良の解決策は #2です。これは、サウンド エミッションをグローバルに適切に制限する方法を紹介しているためです。さらに、知っていれば実行できるクールな関連の xact がたくさんあります (ピッチを変える、他のサウンドをランダムに選択するなど)。

于 2011-12-25T10:46:43.153 に答える