Max
Max

Reputation: 13386

Stop the SoundEffect from looping

I'am building a game in C#/XNA, it is an top-view racing game and I want to play a sound effect, when my car bumps into a wall.

The problem is that my sound keeps looping so, when I hit a wall, the song will instantly start playing, but I want it to play, and when it is finished playing, then it can be played again.

Here is the code that takes care of the collision:

if (map[x][y] == 0) { car.speed = 0;

crash.Play(); }

Please ask me if I'am not clear about something.

Thanks in advance!

Upvotes: 1

Views: 1132

Answers (3)

user1830392
user1830392

Reputation: 41

Here is the complete answer to your questions: http://msdn.microsoft.com/en-us/library/dd940203.aspx

SoundEffectInstance instance = soundEffect.CreateInstance();
instance.IsLooped = true;

However, by default, SoundEffect should not be looped...

Upvotes: 4

Msonic
Msonic

Reputation: 1456

You may want to look into the SoundEffectInstance class. Here's an example on how to use it properly.

You can check if the sound effect state to see if it's currently playing

Edit: I've added a more complete code, as I felt it was needed. It's roughly the same example as in the link I've provided. (Note: This code is untested)

//In your content load
SoundEffect crash;
crash = Content.Load<SoundEffect>("PathToYourSoundEffect");
SoundEffectInstance sei = crash.CreateInstance();

//In your update code
if(sei.State == SoundState.Stopped || sei.State == SoundState.Paused)
{
    sei.Play();
}

Upvotes: 1

Paul Williams
Paul Williams

Reputation: 17040

Call SoundEffect.CreateInstance() to get a SoundEffectInstance. Then set the IsLooped property to false before you call Play:

crashSoundEffectInstance.IsLooped = false;

Upvotes: 2

Related Questions