Actionscript 3 当这个Flash代码';缓存了什么?
我这里有一个flash文件,当flash播放时,它工作正常,但是在IE中,如果flash已经加载过一次,现在被缓存,它就会冻结。在互联网上深入挖掘后,我发现了以下几点: 这里面有很多已知的bug 闪9和闪10,其中一个是 事件发生问题。未完成 从主舞台发射时 嵌入缓存时从缓存加载 WMODE=“transparent”我不确定 这是你的问题,但值得 调查。我听说过一些 解决这个问题的方法。什么之中的一个 他们在,而不是在听 进展或完成所有事件,以及 只是使用一个定时循环,比如 输入_帧或计时器以观看 字节加载/字节总数 我的WMODE是window,但这对我来说最有意义。loadText从未设置,这告诉我它没有进入swfProgressHandle函数。然而问题是,我只和其他人一起写了一半的flash(init中的所有内容),但是我再也联系不到其他人了。我对flash还比较陌生,所以我真的不知道如何让他的加载代码只运行计时器事件,而不是进程和完成事件(如上面引用的那样),这样当缓存时它就可以在IE中工作。有人能帮我吗?大部分代码都很好,这些进程和完整的处理程序只是用于加载导致问题的东西的开始Actionscript 3 当这个Flash代码';缓存了什么?,actionscript-3,Actionscript 3,我这里有一个flash文件,当flash播放时,它工作正常,但是在IE中,如果flash已经加载过一次,现在被缓存,它就会冻结。在互联网上深入挖掘后,我发现了以下几点: 这里面有很多已知的bug 闪9和闪10,其中一个是 事件发生问题。未完成 从主舞台发射时 嵌入缓存时从缓存加载 WMODE=“transparent”我不确定 这是你的问题,但值得 调查。我听说过一些 解决这个问题的方法。什么之中的一个 他们在,而不是在听 进展或完成所有事件,以及 只是使用一个定时循环,比如 输入_帧或计时器以
package
{
//---Imports---
import flash.display.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;
import flash.events.Event;
import flash.events.*;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.utils.Timer;
import flash.utils.*;
import flash.text.Font;
public class FohLoader extends Sprite
{
//create and start load bar
private var loadBar:Sprite = new Sprite();
private var loadText:TextField = new TextField();
private var loadBarBg:Graphics = loadBar.graphics;
//load XML data
private var xmlLoader:URLLoader = new URLLoader();
private var xmlData:XML = new XML();
private var _queue:Array; //holds data objects of items to be loaded
private var _index:int; //the current item in the _queue
private var _images:Array; //holds DisplayObjects of the loaded images
public function FohLoader()
{
_queue = new Array();
_images = new Array();
_index = 0;
//waits for the stage to be created
addEventListener(Event.ADDED_TO_STAGE, stageReadyHandle);
}
private function stageReadyHandle(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, stageReadyHandle);
loadBarBg.lineStyle();
loadBarBg.beginFill(0x5a96c5, 1);
loadBarBg.drawRect(0, 0, 5, 10);
loadBarBg.endFill();
loadBar.x = (stage.stageWidth - 500)/2;
loadBar.y = 30;
loadBar.width = 5;
loadBar.height = 10;
this.addChild(loadBar);
loadText.x = (stage.stageWidth - 0)/2;
loadText.y = 50;
this.addChild(loadText);
//I have no idea if this crap works
//but you would have to do something like this if you want to keep your project to one swf file.
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, swfProgressHandle);
}
private function swfProgressHandle(e:ProgressEvent):void
{
//assumes you want the loadbar to be 500px at 100%
var getPercent:Number = bytesLoaded / e.bytesTotal;
trace(bytes_loaded + " of " + bytes_total + " loaded");
loadBar.width = getPercent * 150; //changed 500 to 150
loadText.text = String(Math.round(getPercent * 30) + "%"); //changed 100 to 30
if (e.bytesLoaded / e.bytesTotal >= 1)
{
e.target.removeEventListener(ProgressEvent.PROGRESS, swfProgressHandle);
loadXml();
}
}
private function loadXml()
{
xmlLoader.addEventListener(Event.COMPLETE, ParseXML);
xmlLoader.load(new URLRequest("flash.xml"));
}
private function ParseXML(e:Event):void
{
e.target.removeEventListener(Event.COMPLETE, ParseXML);
flashInputs = new XML(e.target.data);
//declare all XMl variables, terrible way to do it though
var imageURLList:XMLList = flashInputs.image_area.image.image_url;
var firmCount:XMLList = flashInputs.count_area.total_firms;
var quoteMsg:XMLList = flashInputs.quote_area.quote.quote_text;
var quoteOwner:XMLList = flashInputs.quote_area.quote.quote_owner;
var imageURL:XMLList = flashInputs.image_area.image.image_url;
var imageText:XMLList = flashInputs.image_area.image.image_text;
var quoteMsg0:XML = quoteMsg[0];
var quoteMsg1:XML = quoteMsg[1];
var quoteMsg2:XML = quoteMsg[2];
var quoteMsg3:XML = quoteMsg[3];
var quoteMsg4:XML = quoteMsg[4];
var quoteMsg5:XML = quoteMsg[5];
var quoteMsg6:XML = quoteMsg[6];
var quoteOwner0:XML = quoteOwner[0];
var quoteOwner1:XML = quoteOwner[1];
var quoteOwner2:XML = quoteOwner[2];
var quoteOwner3:XML = quoteOwner[3];
var quoteOwner4:XML = quoteOwner[4];
var quoteOwner5:XML = quoteOwner[5];
var quoteOwner6:XML = quoteOwner[6];
var imageText0:XML = imageText[0];
var imageText1:XML = imageText[1];
var imageText2:XML = imageText[2];
var imageText3:XML = imageText[3];
var imageText4:XML = imageText[4];
var imageText5:XML = imageText[5];
var imageText6:XML = imageText[6];
var imageURL0:XML = imageURL[0];
var imageURL1:XML = imageURL[1];
var imageURL2:XML = imageURL[2];
var imageURL3:XML = imageURL[3];
var imageURL4:XML = imageURL[4];
var imageURL5:XML = imageURL[5];
var imageURL6:XML = imageURL[6];
//loops through the imageURL array and adds each item to the queue
for each(var img:XML in imageURL)
{
addItem(String(img));
}
//loads the first item in the queue
loadItem();
}
//creates a new loader for the item
//adds a data object holding the item path and loader into the queue
private function addItem(path:String):void
{
var loader:Loader = new Loader();
_queue.push({loader:loader, path:path});
}
private function loadItem():void
{
_queue[_index].loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgCompleteHandle);
_queue[_index].loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, IOErrorHandle);
_queue[_index].loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imgProgressHandle);
_queue[_index].loader.load(new URLRequest(_queue[_index].path));
}
//checks the progress of each image, and increases the width of the load bar
private function imgProgressHandle(e:ProgressEvent):void
{
var perc:Number = e.bytesLoaded / e.bytesTotal;
//this line assumes you are loading 6 images, and want the loadbar to end up at 500px
//it also assumes the bar has already reached 30% (150px) from loading the swf
loadBar.width = 150 + (_index * (350 / 6)) + ((350 / 6) * perc);
//so the swf's 150 + (how many images have alrady loaded * the width each image needs to affect the bar) +
//(same thing * percent of current image loaded)
//sounds right, might have to mess with that.
}
//this just stops flash from outputting an error if the image fails to load
private function IOErrorHandle(e:IOErrorEvent):void
{
e.target.removeEventListener(Event.COMPLETE, imgCompleteHandle);
e.target.removeEventListener(IOErrorEvent.IO_ERROR, IOErrorHandle);
trace("Error handled, sir.");
trace("The problem was that, " + e);
}
private function imgCompleteHandle(e:Event):void
{
e.target.removeEventListener(Event.COMPLETE, imgCompleteHandle);
e.target.removeEventListener(ProgressEvent.PROGRESS, imgProgressHandle);
e.target.removeEventListener(IOErrorEvent.IO_ERROR, IOErrorHandle);
//adds the image to the _images array
_images.push(e.target.content);
//increments the load counter
_index++;
//checks to see if the queue is finished or not
if (_index < _queue.length)
{
trade("Not done loading, loading another item");
loadItem();
}
else
{
_index = 0;
_queue = [];
killLoadBar();
init();
}
}
private function killLoadBar()
{
this.removeChild(loadBar);
this.removeChild(loadText);
}
包
{
//---进口---
导入flash.display.*;
导入fl.transitions.Tween;
导入fl.transitions.TweenEvent;
导入fl.transitions.easing.*;
导入flash.events.Event;
导入flash.events.*;
导入flash.events.IOErrorEvent;
导入flash.events.ProgressEvent;
导入flash.net.urloader;
导入flash.net.URLRequest;
导入flash.text.TextField;
导入flash.utils.Timer;
导入flash.utils。*;
导入flash.text.Font;
公共类FohLoader扩展了Sprite
{
//创建并启动加载栏
private-var-loadBar:Sprite=new-Sprite();
私有变量loadText:TextField=newtextfield();
private var loadBarBg:Graphics=loadBar.Graphics;
//加载XML数据
私有变量xmlLoader:URLLoader=新的URLLoader();
私有变量xmlData:XML=newxml();
private var\u queue:Array;//保存要加载的项的数据对象
private var _index:int;//队列中的当前项
private var\u images:Array;//保存加载图像的DisplayObjects
公共函数FohLoader()
{
_队列=新数组();
_images=新数组();
_指数=0;
//等待创建阶段
addEventListener(Event.ADDED_至_阶段,stageReadyHandle);
}
私有函数stageReadyHandle(e:事件):无效
{
移除EventListener(Event.ADDED_至_STAGE,stageReadyHandle);
loadBarBg.lineStyle();
载荷倒钩(0x5a96c5,1);
loadBarBg.drawRect(0,0,5,10);
loadBarBg.endFill();
loadBar.x=(stage.stageWidth-500)/2;
载荷杆y=30;
加载条宽度=5;
载荷杆高度=10;
这个.addChild(加载条);
loadText.x=(stage.stageWidth-0)/2;
loadText.y=50;
this.addChild(loadText);
//我不知道这些废话是否管用
//但是如果你想把你的项目保存到一个swf文件中,你必须这样做。
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS,swfProgressHandle);
}
私有函数swfProgressHandle(e:ProgressEvent):无效
{
//假设您希望加载条在100%时为500px
var getPercent:Number=bytesload/e.bytesTotal;
跟踪(已加载字节数+总字节数+已加载字节数);
loadBar.width=getPercent*150;//将500更改为150
loadText.text=String(Math.round(getPercent*30)+“%”;//将100更改为30
如果(e.bytesLoaded/e.ByTestTotal>=1)
{
e、 target.removeEventListener(ProgressEvent.PROGRESS,swfProgressHandle);
loadXml();
}
}
私有函数loadXml()
{
addEventListener(Event.COMPLETE,ParseXML);
load(新的URL请求(“flash.xml”);
}
私有函数ParseXML(e:Event):void
{
e、 removeEventListener(Event.COMPLETE,ParseXML);
flashInputs=新的XML(e.target.data);
//声明所有XMl变量,这是一种糟糕的方法
var imageURLList:XMLList=flashInputs.image\u area.image.image\u url;
var firmCount:XMLList=flashInputs.count\u area.total\u事务所;
var quoteMsg:XMLList=flashInputs.quote_area.quote.quote_text;
var quoteOwner:XMLList=flashInputs.quote_area.quote.quote_owner;
var-imageURL:XMLList=flashInputs.image\u area.image.image\u url;
var imageText:XMLList=flashInputs.image\u area.image.image\u text;
var quoteMsg0:XML=quoteMsg[0];
var quoteMsg1:XML=quoteMsg[1];
var quoteMsg2:XML=quoteMsg[2];
var quoteMsg3:XML=quoteMsg[3];
var quoteMsg4:XML=quoteMsg[4];
var quoteMsg5:XML=quoteMsg[5];
var quoteMsg6:XML=quoteMsg[6];
var quoteOwner0:XML=quoteOwner[0];
var quoteOwner1:XML=quoteOwner[1];
var quoteOwner2:XML=quoteOwner[2];
var quoteOwner3:XML=quoteOwner[3];
var quoteOwner4:XML=quoteOwner[4];
var quoteOwner5:XML=quoteOwner[5];
var quoteOwner6:XML=quoteOwner[6];
var-imageText0:XML=imageText[0];
var图像文本
<script type="text/javascript">
var flashvars = {};
var params = {};
var attributes = {};
swfobject.embedSWF("myContent.swf?rand="+Math.random(), "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
</script>