Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 通过Actionscript3加载图像两次?_Flash_Actionscript 3_Lazy Loading_Loading - Fatal编程技术网

Flash 通过Actionscript3加载图像两次?

Flash 通过Actionscript3加载图像两次?,flash,actionscript-3,lazy-loading,loading,Flash,Actionscript 3,Lazy Loading,Loading,我正在尝试使用我在中讨论的无限卷轴。我正在使用FlashCS5IDE开发这个 我需要做的最后一件事是在电影的其余部分加载后从外部加载大背景图像(“header_bg_vert.jpg”),而不是要求预先加载整个动画(或在中预加载header动画) 我的AS3在下面。“无限循环”的工作原理是将同一无缝图像的两个副本端对端地放置,然后在第二个图像滚动出屏幕后将其移动到前面——目前,此代码仅显示图像的一个副本。怎么了?还有,这是实现这一目标的最佳方式吗 非常感谢 stop(); //load the

我正在尝试使用我在中讨论的无限卷轴。我正在使用FlashCS5IDE开发这个

我需要做的最后一件事是在电影的其余部分加载后从外部加载大背景图像(“header_bg_vert.jpg”),而不是要求预先加载整个动画(或在中预加载header动画)

我的AS3在下面。“无限循环”的工作原理是将同一无缝图像的两个副本端对端地放置,然后在第二个图像滚动出屏幕后将其移动到前面——目前,此代码仅显示图像的一个副本。怎么了?还有,这是实现这一目标的最佳方式吗

非常感谢

stop();

//load the bg image
var request:URLRequest = new URLRequest("header_bg_vert.jpg");
var s1:Loader = new Loader();
var s2:Loader = new Loader();

s1.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
s1.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

s2.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
s2.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);


function loadProgress(event:ProgressEvent):void {
var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);
trace("Loading: "+percentLoaded+"%");
}
function loadComplete(event:Event):void {
trace("Complete");
}

s1.load(request);
s2.load(request);

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

//Originally, this added 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 left. If the first and second 
//images goes pass the left 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();
//加载bg映像
var请求:URLRequest=newurlrequest(“header_bg_vert.jpg”);
变量s1:Loader=newloader();
变量s2:Loader=newloader();
s1.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loadProgress);
s1.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
s2.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loadProgress);
s2.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
函数loadProgress(事件:ProgressEvent):无效{
var percentLoaded:Number=event.bytesLoaded/event.ByTestTotal;
百分比加载=数学四舍五入(百分比加载*100);
跟踪(“加载:+percentLoaded+“%”);
}
函数加载完成(事件:事件):无效{
跟踪(“完成”);
}
s1.装载(请求);
s2.负载(请求);
//滚动运动的速度。
变量滚动速度:uint=1;
//最初,这在舞台上添加了两个电影剪辑实例。
//变量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.y很明显,它显示两个副本,但都在彼此的顶部。
这是因为flash player在加载s1之前不知道s1有多高。您应该将图像放置在loadComplete()中。

您可以加载一次无外观图像,然后使用
copyPixels()
制作两份图像副本:

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;

var bitmap1:Bitmap;
var bitmap2:Bitmap;

var loader:Loader = new Loader();
loader.load(new URLRequest("images/seemless.png"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoaderProgress);

function onLoaderProgress(e:ProgressEvent):void
{
    var percent:Number = Math.floor((e.bytesLoaded/e.bytesTotal)*100); 

}// end function

function onLoaderComplete(e:Event):void
{
    var bitmap:Bitmap = Bitmap(e.target.content);

    var bitmapData1:BitmapData = new BitmapData(bitmap.width, bitmap.height);
    var bitmapData2:BitmapData = new BitmapData(bitmap.width, bitmap.height);

    bitmapData1.copyPixels(bitmap.bitmapData,
                           bitmap.bitmapData.rect,
                           new Point(0,0));

    bitmapData2.copyPixels(bitmap.bitmapData,
                           bitmap.bitmapData.rect,
                           new Point(0,0));

    bitmap1 = new Bitmap(bitmapData1);
    var bitmapSprite1:Sprite = new Sprite();

    bitmapSprite1.addChild(bitmap1);

    bitmap2 = new Bitmap(bitmapData2);
    var bitmapSprite2:Sprite = new Sprite();
    bitmapSprite2.addChild(bitmap2);
    bitmap2.x = bitmap2.width;

    addChild(bitmapSprite1);
    addChild(bitmapSprite2);

    stage.addEventListener(MouseEvent.MOUSE_OVER, onStageMouseOver);
    stage.addEventListener(MouseEvent.MOUSE_OUT, onStageMouseOut);

}// end function

function onStageEnterFrame(e:Event):void
{
    var speed:Number = 10;

    if(stage.mouseX < stage.stageWidth/2)
    {
        bitmap1.x -= speed;
        bitmap2.x -= speed;

    }// end if

    if(stage.mouseX > stage.stageWidth/2)
    {
        bitmap1.x += speed;
        bitmap2.x += speed;

    }// end if

    if(bitmap1.x <= -(bitmap1.width))
    {
        bitmap1.x = bitmap1.width;

    }// end if

    if(bitmap2.x <= -(bitmap2.width))
    {
        bitmap2.x = bitmap2.width;

    }// end if

    if(bitmap1.x >= bitmap1.width)
    {
        bitmap1.x = -(bitmap1.width);

    }// end if

    if(bitmap2.x >= bitmap2.width)
    {
        bitmap2.x = -(bitmap2.width);

    }// end if

}// end function

function onStageMouseOver(e:MouseEvent):void
{
    stage.addEventListener(Event.ENTER_FRAME, onStageEnterFrame);

}// end function

function onStageMouseOut(e:MouseEvent):void
{
    if(stage.hasEventListener(Event.ENTER_FRAME))
    stage.removeEventListener(Event.ENTER_FRAME, onStageEnterFrame);

}// end function
导入flash.display.Bitmap;
导入flash.display.BitmapData;
导入flash.display.Loader;
导入flash.display.Sprite;
导入flash.events.Event;
导入flash.events.MouseEvent;
导入flash.events.ProgressEvent;
导入flash.geom.Point;
导入flash.geom.Rectangle;
导入flash.net.URLRequest;
var bitmap1:位图;
var bitmap2:位图;
变量加载器:加载器=新加载器();
loader.load(新的URL请求(“images/seemless.png”);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoaderProgress);
函数onLoaderProgress(e:ProgressEvent):无效
{
变量百分比:数字=数学地板((e.bytesLoaded/e.ByTestTotal)*100);
}//端函数
函数onLoaderComplete(e:事件):无效
{
var位图:位图=位图(如target.content);
var bitmapData1:BitmapData=新的BitmapData(bitmap.width、bitmap.height);
var bitmapData2:BitmapData=新的BitmapData(bitmap.width、bitmap.height);
bitmapData1.copyPixels(位图.bitmapData,
bitmap.bitmapData.rect,
新点(0,0));
bitmapData2.copyPixels(位图.bitmapData,
bitmap.bitmapData.rect,
新点(0,0));
bitmap1=新位图(bitmapData1);
变量bitmapSprite1:Sprite=新Sprite();
bitmapSprite1.addChild(bitmap1);
bitmap2=新位图(bitmapData2);
变量bitmapSprite2:Sprite=新Sprite();
bitmapSprite2.addChild(bitmap2);
bitmap2.x=bitmap2.width;
addChild(bitmapSprite1);
addChild(bitmapSprite2);
stage.addEventListener(MouseEvent.MOUSE_OVER,onStageMouseOver);
stage.addEventListener(MouseEvent.MOUSE_OUT,onStageMouseOut);
}//端函数
stageEnterFrame上的函数(e:事件):void
{
var速度:数字=10;
如果(stage.mouseXstage.stageWidth/2)
{
bitmap1.x+=速度;
bitmap2.x+=速度;
}//如果结束
if(bitmap1.x=bitmap2.width)
{
bitmap2.x=-(bitmap2.width);
}//如果结束
}//端函数
函数onStageMouseOver(e:MouseEvent):void
{
stage.addEventListener(Event.ENTER_FRAME,onstageInterframe);
}//端函数
函数onStageMouseOut(e:MouseeEvent):void
{
if(stage.hasEventListener(Event.ENTER_FRAME))
stage.removeEventListener(Event.ENTER_FRAME,onstagenterframe);
}//端函数

我使用鼠标事件来滚动图像,因为我不确定您使用的是什么类型的滚动器,但修改它以适应您的场景应该很容易。

您,好先生,您赢得了数万亿个互联网。这已经困扰我至少一周了。谢谢您!+10的copyPixels();代码。我今天将文件加载到两个连接的上网本上,这很残忍。现在快多了。此外--我尝试了你的代码,但在滚动两次后,它似乎没有加载第二个图像。我可能在某个地方将其改编为我自己的目的,但你可能想调查一下这段代码是否存在于任何地方。