我正在进行的项目有一个巨大的背景图像(800像素宽,2585像素高),向上慢慢向上滚动。
之前,我使用的代码是:http://www.ilike2flash.com/2010/08/endless-scrolling-background-in-as3.html
我修改了代码以向上滚动,但除了有一个奇怪的间歇性错误,偶尔会在图像之后显示一个像素高的空白行并且在循环下一个之前,它实际上似乎并不能很好地处理动态加载(我尝试过使用几个不同的预加载器脚本并打破所有这些脚本,这可能不是初始实现的问题,但现在我正在使用一个巨大的巨大图像。
因此,我的问题是:
一个。还有另外一些免费的,基于Flash的无限滚动代码浮动,支持延迟加载背景对象(比如,现有背景在6中被切断)?
湾如果没有,任何想法如何修改上述链接呢?
谢谢!我的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;
}
}
答案 0 :(得分:1)
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.width;
}else if(s2.x <= -s2.width){
s2.x = s2.width;
}
这消除了动画片段之间的几个像素间隙
就处理加载大资产而言,只需在加载后添加滚动功能即可。您可以在http://drawlogic.com/2007/09/20/howto-using-loaders-in-as3/查找样本,但还有很多其他样本。
答案 1 :(得分:1)
至于“图像之后的像素高空行和下一个循环之前”这个修复摆脱了我的空白......
if (s1.x <= - s1.width) { s1.x = s2.x + s2.width; }
else if (s2.x <= -s2.width) { s2.x = s1.x + s1.width; }
请注意,背景1的x位置位于背景2的x位置加上它的宽度,反之亦然。
答案 2 :(得分: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;
}
当涉及延迟加载背景时,你需要小心它并检查下一部分图像是否已经完成加载,然后再开始滚动它,只记得将图像源存储在某个地方的var中(也许使用静态“延迟加载”类?)所以你试图多次调用url而不需要。
答案 3 :(得分:0)
尝试查看Greensock's Blitmask。使用它,您只需要一个可重复的图像,并且blitmask经过高度优化,即使对于手机功能较弱的处理器也是如此。