是不是经常我们当我们想实现一个背景循环移动时,总是出现一些莫名其妙的bug?这。。。这怎么会出现一条缝呀!
实际上是我们漏了一个非常细节的问题:那就是当一个背景超越某个位置时,我们会把它重置回开始处,这时其实这个细节问题就来了!假设我们要求背景的x<=-1920时就将其改为1920,但是可能前一帧我还是-1915,后一帧就变成了-1925,此时由于-1925<=-1920所以我们会把它放到1920处,但是这时它背后跟着的背景此时却在5处(正常来说应该在0处!!!),因此背景之间产生了重叠!如果继续,这就导致后来的缝隙的出现。
解决方法:在将前一个背景置为1920时也要将后一个背景置为0。
private void move()
{
float finalSpeed = speed * Time.deltaTime * 60f;
//移动背景
q.localPosition -= new Vector3(finalSpeed, 0, 0);
p.localPosition -= new Vector3(finalSpeed, 0, 0);
//重置背景
if (q.localPosition.x <= -2340)
{
q.localPosition = new Vector3(2340f, 0, 0);
p.localPosition = new Vector3(0, 0, 0);
}
if (p.localPosition.x <= -2340)
{
p.localPosition = new Vector3(2340f, 0, 0);
q.localPosition = new Vector3(0, 0, 0);
}
}
本文探讨了在实现背景循环移动时遇到的bug,即背景重置后产生缝隙的原因。问题出在背景被重置到起点时,相邻背景未同步更新。解决方案是当一个背景回到起点时,同时更新其后的背景位置。提供的代码示例展示了如何修正这一问题,确保背景平滑过渡,避免缝隙的出现。
2460

被折叠的 条评论
为什么被折叠?



