2011-12-22 17 views
5

私はちょうどhttp://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.phpで非常に便利な初心者のチュートリアルを実行しているシステムを遅くし、結果に合理的に満足しています。XNAサウンドエフェクトは、大規模

しかし、私は効果音のために3つの.wavファイルを使用することによって、ゲームが大量に鈍化していることに気づいた、私はこのコードのビットを適応している:

打ち上げとSoundEffectを果たし
if (keybState.IsKeyDown(Keys.Enter) || keybState.IsKeyDown(Keys.Space)) 
     { 
      if (!rocketFlying) launch.Play(); 
      rocketFlying = true;  
      ... 
     } 

ボタンを押すと、更新メソッドはこれを60回1秒間チェックし、ボタンをすばやく押すのは難しいので、今度は1回だけ再生します。

しかし、それはまだ明らかに理想的ではないとする、大規模なゲームが遅くなります。

もちろん、私はこの特定のゲームで何かをしようとしていないのですが、私は将来のプロジェクトのために、この問題を整理する方法を知りたいと、それは少しの刺激性であるという理由だけで。ここで乾杯 ライアン

+1

これはあなたの問題を解決しますが、そのコードを見て、あなたは最後KeyboardStateがアップするこれらのボタンを示し、またはあなたがボタンを押すことができるときの間の遅延を実装できるかどうかを確認する必要がある場合、私は知りません。 – annonymously

+0

システムでキーの繰り返しをオフにして、もう一度試してください。それが修正されれば、たとえ一度だけ聞いていても、あなたのアプリは意図したよりも頻繁にサウンドを再生しようとしています。 – jefflunt

答えて

0

は問題です:あなたは60 fpsで実行されていると言います。キーを1秒間押し続けると、サウンドエフェクトが60回発音されます(アイスキーダウンをチェックするだけで、押されたかどうかを確認する必要があります)。

so何かに、あなただけがあなたのXACTプロジェクトに入って最初のプレス

2)に放出すると、あなたのキューの最大のインスタンス、またはカテゴリを制限

1):あなたはカップルのソリューションを持っています合理的な(3は良い番号です、最も古いものを使用して交換してください)

あなたは#1を実行するために誘惑されるかもしれないが、それは正しく、グローバル音の排出量を制限する方法を紹介し、プラスあなたが知っているときあなたが行うことができますクールな関連XACTのものがたくさんあるよう最善の解決策は、#2です(ピッチを変え、ランダムに他の音を選ぶなど)。

+0

ここでこれを行う方法を正確に示し記事です:http://xna-uk.net/blogs/offbyone/archive/2010/03/26/sound-in-xna-3-1-part-ii.aspx さらに、私が言及した他の素晴らしいxact機能の説明が含まれています。 – JasonS

+0

個人的には私はおそらく両方を行うでしょう。同じ重要性があるため、ゲームで起こっている特定のイベントをトラップする方法を学ぶことです。しかし、すばらしい返信、+1 –

関連する問題