【问题标题】:The best overloaded method match for has some invalid arguments?最好的重载方法匹配有一些无效的参数?
【发布时间】:2013-12-02 15:44:02
【问题描述】:

我正在尝试在我的游戏中循环播放我的背景音乐,但是在将这个 if 语句放入更新函数时收到上述错误:

if (!songStart)
{
    MediaPlayer.Play(backgroundMusic); // error occuring here
    songStart = true;
}

当我将它放入加载内容时,错误消失了,但我在更新中需要它,以便它不断检查歌曲是否没有播放(!songstart)

我目前在加载内容中有这个来加载歌曲:

Song backgroundMusic = Content.Load<Song>("backgroundMusic");
MediaPlayer.IsRepeating = true;

编辑:刚刚注意到我也有以下错误,这可能与它有关吗?

'无法从'Microsoft.Xna.Framework.Audio.SoundEffect'转换为'Microsoft.Xna.Framework.Media.SongCollection'

谢谢。

【问题讨论】:

  • 您究竟在哪里得到了那个错误,完整的错误文本是什么?我没有发现任何问题。
  • 抱歉,我已编辑代码以显示错误发生的位置。完整的错误如下。 '错误 1 ​​'Microsoft.Xna.Framework.Media.MediaPlayer.Play(Microsoft.Xna.Framework.Media.Song)' 的最佳重载方法匹配有一些无效参数 \C:\GPT2\BouncingBallXNA\BouncingBallXNA\BouncingBallXNA\MainGame .cs 108 17 弹跳球XNA'
  • MediaPlayer.Play 想要一个Song,而你传递给它的是一个SoundEffect。看我的回答。
  • 已完成谢谢! :)
  • 另外,如果你有机会看看这个教程:rbwhitaker.wikidot.com/using-xact 你可以使用 XACT 在 XNA 中对你的音频进行更多的控制。

标签: c# xna


【解决方案1】:

我认为你不需要那个 bool 来检查音频是否已经在播放,你可以使用:

if(MediaPlayer.State != MediaState.Playing)

对于您的错误,您可能有两个名为 backgroundMusic 的变量,我认为您的类变量是 SoundEffect(正如我在上一个问题中读到的),并且您有一个 Song 变量具有相同在您的LoadContent 中声明的名称。您应该删除第一个。

【讨论】:

  • 谢谢你,它为我节省了一些代码! :) - 知道为什么仍然会出现错误吗?
  • 我认为您有两个名为backgroundMusic 的变量,这就是为什么如果您在LoadContent 中使用那段代码,错误就会消失。
  • 我可以确认我在加载内容中拥有的唯一的 backgroundMusic 变量如下: Song backgroundMusic = Content.Load("backgroundMusic");
  • 不能在LoadContent中声明,如果需要在Update方法中,将其作为类变量移动。
  • 哦哇,现在我觉得自己很愚蠢!谢谢,错误现在已经消失,目前正在运行游戏并等待音乐播放到最后,看看它是否按预期循环播放。手指交叉!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 2015-10-14
  • 2018-07-14
  • 2014-04-14
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多