Actionscript 3 闪存AS3在加载之前不执行任何操作
我有一个程序,它需要加载一个文本文件,它可以这样做,但由于AS3上的所有内容都是多线程的,所以即使没有加载,它也会继续运行程序。比如,如果我创建一个加载文本的函数,然后让它返回加载的文本,它将始终返回“undefined”。我必须添加一个事件监听器,但处理文本返回的方式很难。有没有办法让程序只是等待,或者什么都不做,直到它被加载?听起来你想要的是同步加载数据,这样你就可以进行加载调用,并让它立即返回,就像这样:Actionscript 3 闪存AS3在加载之前不执行任何操作,actionscript-3,text,load,Actionscript 3,Text,Load,我有一个程序,它需要加载一个文本文件,它可以这样做,但由于AS3上的所有内容都是多线程的,所以即使没有加载,它也会继续运行程序。比如,如果我创建一个加载文本的函数,然后让它返回加载的文本,它将始终返回“undefined”。我必须添加一个事件监听器,但处理文本返回的方式很难。有没有办法让程序只是等待,或者什么都不做,直到它被加载?听起来你想要的是同步加载数据,这样你就可以进行加载调用,并让它立即返回,就像这样: # (this actually is not actionscript) file
# (this actually is not actionscript)
fileDataContents = open("file.txt", "r");
然后让fileDataContents立即可用
根据设计,这不是flash的工作方式
在闪存中加载外部数据不是多线程的,而是异步的。不执行同步加载的一个很好的原因是,它会在操作期间阻塞/锁定程序,从而可能导致较差的用户体验
例如,如果这是通过web加载文件:如果用户的internet连接刚刚中断/中断,或者在服务器上突然被移动/删除/修改,该怎么办?或者,如果文件大小适中,但用户处于拨号状态,该怎么办
在大多数情况下,这是您无法控制的,因此可能会导致flash在尝试加载时在用户的浏览器窗口中“永远”冻结,可能会导致整个浏览器随之关闭,最终导致糟糕的用户体验。通过阻止/锁定该循环中的程序,您将无法正确恢复或响应用户。不,您不能
监听像现在这样的完整事件是等待并继续应用程序流的正确方法。我看不出这会变得多么尴尬-我建议更新你的问题,包括让你对活动系统感到不舒服的信息,这样我就可以从那里帮助你
也许您只是没有以与事件系统配合良好的方式构建代码。下面是如何设置一种非常干净、简单的方法来加载一些数据并在完成后启动应用程序
下面是document类,它可以纯粹用作加载文本数据的通道,文本数据将转发到实际应用程序类的新实例:
public class Main extends Sprite
{
private var _application:Application;
private var _loader:URLLoader;
public function Main()
{
var fileUrl:URLRequest = new URLRequest("file.txt");
_loader = new URLLoader(fileUrl);
_loader.addEventListener(Event.COMPLETE, _textLoaded);
}
private function _textLoaded(e:Event):void
{
_loader.removeEventListener(Event.COMPLETE, _textLoaded);
// Load the main Application with the required text data.
_application = new Application( _loader.data );
}
}
然后是您的<代码>应用程序>代码>,您可以考虑您的中心类:
public class Application
{
public function Application(textData:String)
{
// Here we have access to the required text, and we can
// begin preparing the main Application.
trace(textData);
}
}
请显示一点您的代码,目前还不清楚您尝试了什么。如果您能共享显示问题的整个源代码,那就太好了。只有加载是异步的,其他一切都是同步的,除非您使用FP11.4以后的
Worker
类。