我有一个基本的声音管理器类,它来自一个在线示例:http://www.xnawiki.com/index.php?title=Basic_Sound_Manager_For_XNA_GS_3.0
问题在于每当我调用LoadSound(string assetName,string assetPath)方法时,我都会得到一个NullReferenceException。我猜这意味着内容管理器找不到指定的引用并返回null。 但是对我来说没有意义,因为我正在引用的内容文件夹中肯定有声音。在将声音管理转移到一个单独的课程之前,它才有效。
这是我的SoundManager类的相关代码片段:
public static class SoundManager
{
// Class variables
static Dictionary<string, SoundEffect> sounds = new Dictionary<string,
SoundEffect>();
static Song currentSong;
static ContentManager content;
static float soundVolume = 1f;
// Initialize: Load the game's content manager.
public static void Initialize(Game game)
{
content = game.Content;
}
public static void LoadSound(string assetName)
{
LoadSound(assetName, assetName);
}
// Load a sound from a passed name into the dictionary
public static void LoadSound(string assetName, string assetPath)
{
sounds.Add(assetName, content.Load<SoundEffect>(assetPath));
}
}
行
中发生异常sounds.Add(assetName, content.Load<SoundEffect>(assetPath));
在Game1的Initialize()方法中,我正在调用:
SoundManager.Initialize(this);
在Game1的LoadContent()方法中,我调用了以下内容:
SoundManager.LoadSound("collision", "Sounds\\collision");
Content.RootDirectory是“Content”,内容/ sounds / ding.wav(资产名称冲突)中存在声音。我在这里认真看不出任何问题。如果有任何奇怪的范围问题,任何人都可以看到,请帮助,我有一个即将到期的截止日期。
答案 0 :(得分:3)
如果您的代码中包含NRE,那么content
必须为空:即Initialize
之前未调用LoadSound
。使用断点或一些快速调试来检查是否是这种情况。