【问题标题】:XNA Mediaplayer.Play() starts playing at different times across computers?XNA Mediaplayer.Play() 开始在不同时间跨计算机播放?
【发布时间】:2019-12-02 00:20:45
【问题描述】:

我正在尝试在 Monogame 中开发一款节奏游戏。音符与帧速率无关,并且可以在不同的计算机上始终如一地工作,但播放的歌曲则不然。现在我已经把它连接起来了,所以在我按下一个键之前,笔记会产生并且 MediaPlayer.Play() 不会启动(所以它在 loadcontent/initialize 之外,就像我看到的其他解决方案所建议的那样)。在我按下“I”键(在更新中检查)之前,歌曲不会开始播放。然而,这首歌似乎在不同的时间开始在不同的设备上播放。我在我的笔记本电脑(电池)和台式机上拉下项目,并同时在两者上按下“I”键,我在笔记本电脑上得到不同的结果。有时它会比桌面领先几秒钟,有时它会落后一两秒(通常是这种情况)。在桌面上看起来非常一致。我尝试了十几次,一切仍然同步,但不是在我的笔记本电脑上。我担心这只能在我的电脑上运行,而不能在其他电脑上运行。

我尝试启用 fixedTimeStep 并将 FPS 设置为 60(并将 TargetElapsedTime 设置为窗口标题,确保它们确实都达到 60),但我仍然得到不一致的结果。我从其他答案中阅读了有关使用 MediaPlayer 类中的 PlayPosition 的信息,但该属性是只读的,所以我不太了解如何使用它。

起初,我认为我的笔记只是依赖于帧速率,但在设置 FPS 和 fixedTimeStep,并将我的笔记本电脑放在桌面显示器上之后,它们完美匹配。只是歌曲没有同步。我还是 XNA 的新手,但我找不到其他人报告这样的不同歌曲开始时间。任何帮助将不胜感激。

【问题讨论】:

    标签: xna monogame


    【解决方案1】:

    我在第二天早上起床后想到了一个解决方案。我认为 MediaPlayer.Play() 一定有一些开销,但我想知道是否可以启动它,暂停它,然后恢复。事实证明,有一个 Pause() 和 Resume() 方法,这正是这项工作所缺少的。

    所以!如果其他人有类似的问题,这就是我所做的。我保留了激活 MediaPlayer.Play() 的密钥,但之后立即添加了 MediaPlayer.Pause()。然后我得到了另一个键来恢复歌曲,当歌曲恢复时产生了音符。所以按“我”播放歌曲并立即暂停。按“R”恢复歌曲并开始产生音符。

    【讨论】:

    • 公平地说,XNA 中的媒体播放器有一些学习曲线,例如,由于没有对 PlayPosition 的公共写入权限,我不怪你有一些困难用它。
    • 是的,Play() 调用正在加载视频并缓冲帧,这取决于您的磁盘访问速度等需要不同的时间。播放/暂停技巧是我见过的一种之前。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多