Actionscript 3 在Flash CS5/ActionScript 3中延迟加载无限滚动背景

Actionscript 3 在Flash CS5/ActionScript 3中延迟加载无限滚动背景,actionscript-3,background,lazy-loading,flash-cs5,Actionscript 3,Background,Lazy Loading,Flash Cs5,我正在做的项目有一个巨大的背景图像(800px宽2585px高),慢慢向上滚动 之前,我在以下位置使用代码: 我将代码修改为向上滚动,但除了有一个奇怪的间歇性错误,偶尔在图像后和循环下一个之前显示一个像素高的空行,它似乎真的不能很好地处理动态加载(我尝试使用了几个不同的预加载脚本,它破坏了所有这些脚本),最初的实现可能没有什么问题,但现在我使用的是一个巨大的图像 因此,我的问题是: a。是否有另一个免费的、基于Flash的无限滚动代码支持延迟加载背景对象(比如,现有的背景切碎为6) b。如果没有

我正在做的项目有一个巨大的背景图像(800px宽2585px高),慢慢向上滚动

之前,我在以下位置使用代码:

我将代码修改为向上滚动,但除了有一个奇怪的间歇性错误,偶尔在图像后和循环下一个之前显示一个像素高的空行,它似乎真的不能很好地处理动态加载(我尝试使用了几个不同的预加载脚本,它破坏了所有这些脚本),最初的实现可能没有什么问题,但现在我使用的是一个巨大的图像

因此,我的问题是:

a。是否有另一个免费的、基于Flash的无限滚动代码支持延迟加载背景对象(比如,现有的背景切碎为6)

b。如果没有,你知道我如何修改上面的链接吗

谢谢!我的AS3如下:

stop();

//The speed of the scroll movement.
var scrollSpeed:uint = 2;

//This adds two instances of the movie clip onto the stage.
var s1:ScrollBg = new ScrollBg();
var s2:ScrollBg = new ScrollBg();
addChild(s1); 
addChild(s2);
setChildIndex(s1, 0);
setChildIndex(s2, 0);

//This positions the second movieclip next to the first one.
s1.y = 0;
s2.y = s1.height;

//Adds an event listener to the stage. 
stage.addEventListener(Event.ENTER_FRAME, moveScroll); 

//This function moves both the images to top. If the first and second 
//images goes past the top stage boundary then it gets moved to 
//the other side of the stage. 
function moveScroll(e:Event):void{
  s1.y -= scrollSpeed;  
  s2.y -= scrollSpeed;  

  if(s1.y <= -s1.height){
     s1.y = s1.height - scrollSpeed;
  }else if(s2.y <= -s2.height){
     s2.y = s2.height - scrollSpeed;
  }
}
stop();
//滚动运动的速度。
变量滚动速度:uint=2;
//这将在舞台上添加两个电影剪辑实例。
变量s1:ScrollBg=newscrollbg();
变量s2:ScrollBg=newscrollbg();
addChild(s1);
addChild(s2);
setChildIndex(s1,0);
setChildIndex(s2,0);
//这将第二个movieclip定位在第一个movieclip的旁边。
s1.y=0;
s2.y=s1.5米高度;
//将事件侦听器添加到阶段。
stage.addEventListener(Event.ENTER_FRAME,moveScroll);
//此功能将两个图像移动到顶部。如果第一个和第二个
//图像经过顶部舞台边界,然后移动到
//舞台的另一边。
功能移动滚动(e:事件):无效{
s1.y-=滚动速度;
s2.y-=滚动速度;
如果(s1.yhowdyændrew
该链接有大约15行代码。
它创建对象的两个实例,然后每帧移动1px,并检查第一个剪辑是否在视图之外,在这一点上,它将电影剪辑移到另一个剪辑的边缘。没有太大的错误空间…但如果我必须指出它,我会说它就在这里

if(s1.x < -s1.width){
  s1.x = s1.width;
}else if(s2.x < -s2.width){
  s2.x = s2.width;
}
if(s1.x<-s1.width){
s1.x=s1.x宽度;
}否则如果(s2.x<-s2.宽度){
s2.x=s2.0宽度;
}

应该是:(请注意,
我认为您需要一个圆形的图像宽度/高度,才能使其正常工作,因为在演示中,flash不喜欢渲染。5px间隙等。您可以尝试将图像推到另一个的位置,以确保图像正确对接,并希望它渲染得更好:

if(s1.x < -s1.width){
  s1.x = s2.x + s2.width;
}else if(s2.x < -s2.width){
  s2.x = s1.x + s1.width;
}
if(s1.x<-s1.width){
s1.x=s2.x+s2.x宽度;
}否则如果(s2.x<-s2.宽度){
s2.x=s1.x+s1.x宽度;
}
当涉及到背景的延迟加载时,您需要小心,并在开始滚动到下一个部分图像之前检查下一个部分图像是否已完成加载,只需记住将图像源存储在某个地方的var中(可能使用静态“延迟加载”类?)因此,您不需要多次尝试调用url。

直到“图像后像素高的空白行,循环下一个”这一修复为我消除了空白

if (s1.x <=  -  s1.width) { s1.x = s2.x + s2.width; }
else if (s2.x <= -s2.width) { s2.x = s1.x + s1.width; }

if(s1.x试试看。使用它,你只需要一个可重复的图像,blitmask就得到了高度优化,即使是对于功能较弱的手机处理器也是如此。

嗨!你建议的编辑并没有修复这个错误——在两次迭代后,它仍然会增加大约一两行空间。他似乎在演示页面上没有得到同样的问题——我已经更新了我的问题是完整的代码。另外,我在这两个条件语句中都减去了scrollSpeed的值——这似乎是在一次迭代后出现的错误。我猜空间正是scrollSpeed的值。嗨!是的,我有一个循环图像(实际上相当偶然——艺术家很出色,我非常惊讶)。我将稍后尝试该代码,看看是否更好(减去scrollSpeed似乎有帮助)。快速提问——目前,scrollBg是一个电影剪辑对象。在完成所有其他操作后,我将如何加载该代码?
if (s1.x <=  -  s1.width) { s1.x = s2.x + s2.width; }
else if (s2.x <= -s2.width) { s2.x = s1.x + s1.width; }