显示视频C#XNA时出现延迟

显示视频C#XNA时出现延迟,c#,video,xna,2d,lag,C#,Video,Xna,2d,Lag,当我试图在视频游戏中显示背景明星视频+一些2D精灵(如太空船、激光、爆炸)时,我遇到了几个滞后问题 看这些图片来理解我的意思: 当我玩游戏的时候,移动我的飞船或者炸一些星体。 有一些非常令人不快的自由,破坏了玩的乐趣 你能告诉我为什么会这样吗 谢谢:)这是代码: 声明: Video video; VideoPlayer player; Texture2D videoTexture; 加载内容: video = Content.Load<Video>

当我试图在视频游戏中显示背景明星视频+一些2D精灵(如太空船、激光、爆炸)时,我遇到了几个滞后问题

看这些图片来理解我的意思:

当我玩游戏的时候,移动我的飞船或者炸一些星体。 有一些非常令人不快的自由,破坏了玩的乐趣

你能告诉我为什么会这样吗

谢谢:)

这是代码:

声明:

    Video video;
    VideoPlayer player;
    Texture2D videoTexture;
加载内容:

   video = Content.Load<Video>(@"VIDEOS\VIDEO_BACKGROUND_LEVEL_1");
   player = new VideoPlayer();
抽签:

if (allVariable.fenetre_Niveau_1_Wolf_359 == true || allVariable.fenetreAfficherStats == true)
        {

            spriteBatch.Draw(allVariable.backgroundAntibug, new Rectangle(0, 0, 1600, 900), Color.White);

            // Only call GetTexture if a video is playing or paused
            if (player.State != MediaState.Stopped)
                videoTexture = player.GetTexture();

            // Draw the video, if we have a texture to draw.
            if (videoTexture != null)
            {
                spriteBatch.Draw(videoTexture, new Rectangle(0, 0, 1600, 900), Color.White);
            }
        }

作为一般的经验法则,播放一个视频,同时有几个对象在上面是一个坏主意,因为它是真正密集的系统处理


与其使用视频(我假设您使用它来显示起点是如何在后面移动的),为什么不使用代码创建它呢

你可以创建一张地图,然后在上面移动你的角色,或者制作一张巨大的地图和一个在上面不断移动的相机;强制玩家停留在摄影机边界内。有了它,你可以达到与星星移动相同的效果,但不会影响性能

如果不可能创建一个巨大的贴图+摄影机,无论出于何种原因,您都可以创建一个自动滚动背景,它是一个纹理2D,在背景上不断移动


自动滚动选项是最简单的选项,您可以检查如何实现它。

目前这是一个非常广泛的问题。这可能是由于编码不好/试图更新和/或每秒绘制多次/等等。。。另外,尝试用pic查看延迟也是不可能的。这不是因为我在后台禁用视频时编码错误。比赛非常顺利,没有落后。当我启用视频时,会出现几个freez。您用于播放/显示视频的代码是什么?(我假设您使用它来显示开始在背面移动的方式)“-是的,但正如您在gif预览中所看到的:(如果您没有看到周年纪念,请下载它)我有几个“层”的星星,它们提供了3D深度。我不想失去它,因为我使用的是一个简单的2D纹理。@Husker哦,但你不会失去它的!可以有任意多个二维图层,一个图层覆盖另一个图层。想法是:在底部有一个黑色层,然后从那里开始。。。4或5层,仅带星星(透明背景)。这样,你会得到同样的效果。你所要做的就是在“星星”纹理上实现自动滚动,就这样。检查spritebatch.Draw重载,我相信除了基本重载外,所有重载都有一个float参数,它是您绘制的项目的深度,允许您获得所需的效果。好的,谢谢您的想法。我将使用透明方法来实现:)
if (allVariable.fenetre_Niveau_1_Wolf_359 == true || allVariable.fenetreAfficherStats == true)
        {

            spriteBatch.Draw(allVariable.backgroundAntibug, new Rectangle(0, 0, 1600, 900), Color.White);

            // Only call GetTexture if a video is playing or paused
            if (player.State != MediaState.Stopped)
                videoTexture = player.GetTexture();

            // Draw the video, if we have a texture to draw.
            if (videoTexture != null)
            {
                spriteBatch.Draw(videoTexture, new Rectangle(0, 0, 1600, 900), Color.White);
            }
        }