gpt4 book ai didi

xna - 使用 MediaPlayer 时,我在 XNA 中看到奇怪的行为

转载 作者:行者123 更新时间:2023-12-05 00:22:40 26 4
gpt4 key购买 nike

在 XNA 中,我使用 MediaPlayer 来播放我的音乐。我发现在玩发布版本(作为可执行文件运行,而不是从 Visual Studio 运行)时,游戏窗口有时会闪烁,看起来像是在尝试最小化然后返回。有时任务栏上的游戏图标会偏向一边,然后滑回原来的位置。我正在使用 Windows 7。通过启动游戏,将资源管理器窗口设置为事件窗口,将其保留一两秒钟,然后单击游戏,很容易重现。游戏窗口跳动大约需要 6-10 秒,之后大约每 4-8 秒跳动一次。

我查明了到底是什么导致了这个,它是以下代码,通过主游戏更新被调用。

if (!IsActive && MediaPlayer.State != MediaState.Paused)
{
MediaPlayer.Pause();
}
if (IsActive && MediaPlayer.State == MediaState.Paused)
{
MediaPlayer.Resume();
}

基本上,我会在游戏未启动时暂停音乐,并在游戏再次启动时取消暂停。出于某种原因,这把事情搞砸了。我试过只是让音乐静音而不是暂停,但我得到了同样的效果。我制作了一个新的 PC XNA 4.0 游戏,但即使在主要更新函数中只有上述代码(和 base.Update),它仍然会发生,所以它肯定是导致问题的代码。有谁知道这里发生了什么,或者游戏进入非事件状态时暂停音乐的其他方法?

最佳答案

我能够使用您在上面发布的代码在新的游戏项目中重现类似的问题(对我来说,游戏窗口实际上会挂起并变得无响应)。

我还能够从其他遇到类似问题的人那里找到论坛帖子(早在两年前,就像这个 -> http://forums.create.msdn.com/forums/t/45296.aspx )。这显然是框架中的错误。

我不确定会发生什么。我猜想检查 MediaPlayer 可能会偷走窗口焦点,然后返回到返回焦点的游戏会发生一些有趣的事情,因此在几毫秒内,游戏正在失去并获得焦点,因此音乐正在暂停恢复暂停以每秒 60 次的速度重复。在像我这样较弱的机器上,它会导致窗口变得无响应。这只是推测,因为我不确定,但这是有道理的。

不过,我能够通过简单地从等式中删除 MediaPlayer 状态检查来解决这个问题。如果您将自己的 bool 标志添加到游戏中(类似于“正在播放”),然后查询该 bool 变量而不是检查 MediaPlayer 状态,问题就会解决,您将获得所需的功能。

代码如下所示。

bool isMusicPlaying = false;
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

Song song = Content.Load<Song>("SampleSong");
MediaPlayer.Play(song);
isMusicPlaying = true;
}

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

if (!IsActive && isMusicPlaying == true)
{
MediaPlayer.Pause();
isMusicPlaying = false;
}
else if (IsActive && isMusicPlaying == false)
{
MediaPlayer.Resume();
isMusicPlaying = true;
}

base.Update(gameTime);
}

使用上面的代码,您应该仍然可以获得您正在寻找的原始功能,同时摆脱使用 MediaPlayer 的内置状态时发生的不良行为。

关于xna - 使用 MediaPlayer 时,我在 XNA 中看到奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com