我正在关注尝试学习XNA的this教程,但我遇到了使图像顺利滚动的问题。一切正常,直到我的第一张图片回来并再次开始滚动循环。
奇怪的是,问题似乎是绘制图像需要花费几秒钟,然后如果要继续滚动就会弹到视图中。我将背景更改为红色以查看图像是否由于某种原因未加载,但我得到了背景精灵纹理中使用的相同蓝色的连续流。
有什么建议吗?以下是更新方法的代码:
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);
}
答案 0 :(得分:1)
看看你的if语句,在某些时候它会破裂。
您正在将所有图像移到左侧。然后当它达到宽度时,它会根据另一个图像的位置重置自己,该位置也会向左移动。
这种逻辑是有缺陷的,需要修改。