Flash 如果actionscript没有';你不支持线程吗?

Flash 如果actionscript没有';你不支持线程吗?,flash,actionscript,Flash,Actionscript,由于Flash不支持多线程,如何在actionscript 3中实现这一点?简短的回答是-通过添加事件侦听器异步执行 答案很简单——如果你做过一次,你已经做过一百万次了: var site_loader:Loader; var your_text_field:TextField; init(); start_load(); function init():void { site_loader = new Loader(); this.addChild(site_loader)

由于Flash不支持多线程,如何在actionscript 3中实现这一点?

简短的回答是-通过添加事件侦听器异步执行

答案很简单——如果你做过一次,你已经做过一百万次了:

var site_loader:Loader;
var your_text_field:TextField;

init();
start_load();

function init():void
{
    site_loader = new Loader();
    this.addChild(site_loader);

    your_text_field = new TextField();
    this.addChild(your_text_field);
}

function start_load():void
{
    site_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, update_progress_text);
    site_loader.addEventListener(Event.COMPLETE, start_site);
    site_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, load_error);

    var url_path:String = "path/to/content.swf";
    var url_request:URLRequest = new URLRequest(url_path);  

    site_loader.load(url_request);
}

function update_progress_text(event:ProgressEvent):void
{
    var site_loader_progress:int = 100 * event.bytesLoaded / event.bytesTotal;
    your_text_field.text = site_loader_progress + " %";
}

function start_site(event:Event):void
{
    site_loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, update_progress_text);
    site_loader.removeEventListener(Event.COMPLETE, start_site);
    site_loader.removeEventListener(IOErrorEvent.IO_ERROR, load_error);
}
基本上,ActionScript虚拟机在“调度事件、处理事件、渲染图形”循环中运行;每个帧、事件都有一个时间片,每个事件“基本上”在单处理器系统中作为线程运行

虽然ActionScript确实不是多线程的,但它确实依赖于一个非常性感的事件驱动架构,在许多情况下,它是线程的更好替代品(请参阅本文:)


话虽如此,希望AVM的未来版本将明确支持多线程,如果只是为了更好地利用无处不在的多处理器系统。

简单的回答是-通过添加事件侦听器异步执行

答案很简单——如果你做过一次,你已经做过一百万次了:

var site_loader:Loader;
var your_text_field:TextField;

init();
start_load();

function init():void
{
    site_loader = new Loader();
    this.addChild(site_loader);

    your_text_field = new TextField();
    this.addChild(your_text_field);
}

function start_load():void
{
    site_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, update_progress_text);
    site_loader.addEventListener(Event.COMPLETE, start_site);
    site_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, load_error);

    var url_path:String = "path/to/content.swf";
    var url_request:URLRequest = new URLRequest(url_path);  

    site_loader.load(url_request);
}

function update_progress_text(event:ProgressEvent):void
{
    var site_loader_progress:int = 100 * event.bytesLoaded / event.bytesTotal;
    your_text_field.text = site_loader_progress + " %";
}

function start_site(event:Event):void
{
    site_loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, update_progress_text);
    site_loader.removeEventListener(Event.COMPLETE, start_site);
    site_loader.removeEventListener(IOErrorEvent.IO_ERROR, load_error);
}
基本上,ActionScript虚拟机在“调度事件、处理事件、渲染图形”循环中运行;每个帧、事件都有一个时间片,每个事件“基本上”在单处理器系统中作为线程运行

虽然ActionScript确实不是多线程的,但它确实依赖于一个非常性感的事件驱动架构,在许多情况下,它是线程的更好替代品(请参阅本文:)


话虽如此,希望AVM的未来版本将明确支持多线程,如果只是为了更好地利用无处不在的多处理器系统。

ActionScript 3使用事件,您只需在每一帧更新进度条。这不是一个明确的答案,但如果您正在寻找一个好的解决方案,查看Greensock提供的LoaderMax class套件。ActionScript3使用事件,您只需要在每一帧更新进度条。这不是一个明确的答案,但如果您正在寻找一个好的解决方案,请查看Greensock提供的LoaderMax类套件。它是