0

我需要为学校制作游戏。

我正在添加一些音效和音乐。

我在课堂上有 .wav 的路径,它会播放它们,但只有当我从项目中的 bin 地图开始游戏时。我发现这些文件不包含在构建之外。我开始寻找它,但找不到正确的方法。

我有:

MediaPlayer _musicPlayer = new MediaPlayer();
string s = System.IO.Packaging.PackUriHelper.UriSchemePack;
Uri uri = new Uri(@"pack://application:,,,/{Assembly name};component/Resources/Sounds/Music/Main_theme_-_Thiago_Adamo.wav")
_musicPlayer.Open(uri);
_musicPlayer.Play();

然而,这不起作用。如果我添加一个消息框:

uri.IsFile.ToString()

它显示为假。

在文件中,我将属性设置为:

构建操作:资源

复制到输出目录:始终复制

我希望有一个人可以帮助我。

4

1 回答 1

4

在 Visual Studio 的解决方案中将文件添加到项目中,以便它们显示在解决方案资源管理器中(默认停靠在 VS 窗口的右侧)。单击一个文件,您会看到该文件的属性窗口(默认显示在 VS 中的解决方案资源管理器下方)。确保该Copy to Output Directory属性设置为Copy AlwaysCopy if newer,并且Build Action设置为Content。对您需要的每个声音文件执行此操作。

此时,当您构建应用程序时,文件将被复制到与您的应用程序相同的文件夹中。他们不会被打包。它们只会在您的程序旁边的文件系统中。如果您在调试模式下构建应用程序,则它位于项目的 /bin/Debug 文件夹(默认情况下)中。如果是 Release 模式,则为 /bin/Release 文件夹,但只要您的工作目录与您的应用程序匹配,您就可以仅通过文件名在 Uri 中引用它们(否则您需要检查应用程序路径并构建完整路径到文件)。

您需要Content代替的原因Resource是在类文档的备注部分MediaPlayer

使用应用程序分发媒体时,不能将媒体文件用作项目资源。在您的项目文件中,您必须改为将媒体类型设置为 Content 并将 CopyToOutputDirectory 设置为 PreserveNewest 或 Always。

于 2017-10-11T14:30:30.530 回答