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