Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 滚动背景不平滑_C#_Xna - Fatal编程技术网

C# 滚动背景不平滑

C# 滚动背景不平滑,c#,xna,C#,Xna,我正在学习XNA的教程,但在使图像平滑滚动时遇到了问题。一切正常,直到我的第一张图片恢复正常并再次开始滚动循环 奇怪的是,问题似乎出在绘制图像上,因为它需要几秒钟的时间,然后突然出现在视图中,如果图像继续滚动的话,它会出现在您期望的位置。我将背景更改为红色,以查看图像是否出于某种原因未加载,但我得到了一个连续的蓝色流,该蓝色流与背景精灵纹理中使用的颜色相同 有什么建议吗?以下是更新方法的代码: protected override void Update(GameTime gameTim

我正在学习XNA的教程,但在使图像平滑滚动时遇到了问题。一切正常,直到我的第一张图片恢复正常并再次开始滚动循环

奇怪的是,问题似乎出在绘制图像上,因为它需要几秒钟的时间,然后突然出现在视图中,如果图像继续滚动的话,它会出现在您期望的位置。我将背景更改为红色,以查看图像是否出于某种原因未加载,但我得到了一个连续的蓝色流,该蓝色流与背景精灵纹理中使用的颜色相同

有什么建议吗?以下是更新方法的代码:

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

        // TODO: Add your update logic here
        if (bg1.getPosition().X < -bg1.size.Width)
        {
            bg1.setPosition( new Vector2(bg5.getPosition().X + bg5.size.Width,0) );
        }
        if (bg2.getPosition().X < -bg2.size.Width)
        {
            bg2.setPosition(new Vector2(bg1.getPosition().X + bg1.size.Width, 0));
        }
        if (bg3.getPosition().X < -bg3.size.Width)
        {
            bg3.setPosition(new Vector2(bg2.getPosition().X + bg2.size.Width, 0));
        }
        if (bg4.getPosition().X < -bg4.size.Width)
        {
            bg4.setPosition(new Vector2(bg3.getPosition().X + bg3.size.Width, 0));
        }
        if (bg5.getPosition().X < -bg5.size.Width)
        {
            bg5.setPosition(new Vector2(bg4.getPosition().X + bg4.size.Width, 0));
        }

        Vector2 direction = new Vector2(-1,0);
        Vector2 speed = new Vector2(100.0f/1000.0f,0.0f);

        bg1.updatePosition( (direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg2.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg3.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg4.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);
        bg5.updatePosition((direction * speed) * (float)gameTime.ElapsedGameTime.TotalMilliseconds);

        base.Update(gameTime);
    }
受保护覆盖无效更新(游戏时间游戏时间)
{
//允许游戏退出
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
这是Exit();
//TODO:在此处添加更新逻辑
if(bg1.getPosition().X<-bg1.size.Width)
{
bg1.setPosition(新向量2(bg5.getPosition().X+bg5.size.Width,0));
}
if(bg2.getPosition().X<-bg2.size.Width)
{
bg2.setPosition(新向量2(bg1.getPosition().X+bg1.size.Width,0));
}
if(bg3.getPosition().X<-bg3.size.Width)
{
bg3.setPosition(新向量2(bg2.getPosition().X+bg2.size.Width,0));
}
if(bg4.getPosition().X<-bg4.size.Width)
{
bg4.setPosition(新向量2(bg3.getPosition().X+bg3.size.Width,0));
}
if(bg5.getPosition().X<-bg5.size.Width)
{
bg5.setPosition(新向量2(bg4.getPosition().X+bg4.size.Width,0));
}
矢量2方向=新矢量2(-1,0);
矢量2速度=新矢量2(100.0f/1000.0f,0.0f);
bg1.updatePosition((方向*速度)*(浮点)gameTime.ElapsedGameTime.Total毫秒);
bg2.updatePosition((方向*速度)*(浮点)gameTime.ElapsedGameTime.Total毫秒);
bg3.updatePosition((方向*速度)*(浮点)gameTime.ElapsedGameTime.Total毫秒);
bg4.updatePosition((方向*速度)*(浮点)gameTime.ElapsedGameTime.Total毫秒);
bg5.updatePosition((方向*速度)*(浮点)gameTime.ElapsedGameTime.Total毫秒);
更新(游戏时间);
}

查看if语句,在某个点上它会中断

您正在将所有图像向左移动。然后,当它达到自身宽度时,它会根据另一个图像的位置重置自身,该位置也会向左移动

这种逻辑是有缺陷的,需要修改