从数组播放声音 returns 错误 C# - Visual Studio
Playing a sound from an array returns an error C# - Visual Studio
所以我在 Visual Studio 中有一个使用 C# 的 Windows 表单应用程序,我有三个数组:
System.Media.SoundPlayer[] keyClick = new System.Media.SoundPlayer[4];
System.Media.SoundPlayer[] spaceClick = new System.Media.SoundPlayer[2];
System.Media.SoundPlayer[] enterClick = new System.Media.SoundPlayer[1];
程序初始化时设置为包含某些声音文件:
private void textIn_Enter(object sender, EventArgs e)
{
for(int i = 0; i < 4; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\keyClick" + i + ".wav");
}
for (int i = 0; i < 2; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
for (int i = 0; i < 1; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\enterClick" + i + ".wav");
}
}
儿子现在,例如 keyClick 包含 keyClick1.wav 到 keyClick5.wav。按下某个键时,程序会播放特定数组中随机索引处的项目:
keyClick[randomizer.Next(0, 4)].Play();
所以我写的第一个是上面那个工作正常,但是我添加了一个从 spaceKey 数组播放的空格键命令:
spaceClick[randomizer.Next(0, 2)].Play();
然而这以及从 enterClick 数组播放 returns 一个错误:
"An unhandled exception of type 'System.NullReferenceException'
occurred in TextAdventure.exe
Additional information: Object reference not set to an instance of an
object."
我不知道如何解决这个问题,据我所知,它应该与通过 keyClick 播放完全一样,但事实并非如此。有谁知道如何解决这个问题?
问题是你在哪里填充数组,你只填充 keyClick。
这是填充空间的循环点击
for (int i = 0; i < 2; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
您正在设置 keyClick[i]
因此 覆盖 上一个循环中已经存在的。应该改成这个
for (int i = 0; i < 2; i++)
{
spaceClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
你的第三个循环也是同样问题的受害者,应该相应地改变
所以我在 Visual Studio 中有一个使用 C# 的 Windows 表单应用程序,我有三个数组:
System.Media.SoundPlayer[] keyClick = new System.Media.SoundPlayer[4];
System.Media.SoundPlayer[] spaceClick = new System.Media.SoundPlayer[2];
System.Media.SoundPlayer[] enterClick = new System.Media.SoundPlayer[1];
程序初始化时设置为包含某些声音文件:
private void textIn_Enter(object sender, EventArgs e)
{
for(int i = 0; i < 4; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\keyClick" + i + ".wav");
}
for (int i = 0; i < 2; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
for (int i = 0; i < 1; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\enterClick" + i + ".wav");
}
}
儿子现在,例如 keyClick 包含 keyClick1.wav 到 keyClick5.wav。按下某个键时,程序会播放特定数组中随机索引处的项目:
keyClick[randomizer.Next(0, 4)].Play();
所以我写的第一个是上面那个工作正常,但是我添加了一个从 spaceKey 数组播放的空格键命令:
spaceClick[randomizer.Next(0, 2)].Play();
然而这以及从 enterClick 数组播放 returns 一个错误:
"An unhandled exception of type 'System.NullReferenceException' occurred in TextAdventure.exe
Additional information: Object reference not set to an instance of an object."
我不知道如何解决这个问题,据我所知,它应该与通过 keyClick 播放完全一样,但事实并非如此。有谁知道如何解决这个问题?
问题是你在哪里填充数组,你只填充 keyClick。
这是填充空间的循环点击
for (int i = 0; i < 2; i++)
{
keyClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
您正在设置 keyClick[i]
因此 覆盖 上一个循环中已经存在的。应该改成这个
for (int i = 0; i < 2; i++)
{
spaceClick[i] = new System.Media.SoundPlayer(@"C:\Users\brain\OneDrive\Documents\Visual Studio 2015\Projects\TextAdventure\TextAdventure\Assets\spaceClick" + i + ".wav");
}
你的第三个循环也是同样问题的受害者,应该相应地改变