用于在actionscript 3中加载xml数据的进度条

时间:2012-11-24 16:54:19

标签: xml actionscript urlloader

我正在使用Flash CS5和FlashDevelop在ActionScript 3中构建游戏。 我正在努力让游戏尽可能多地获得数据。因此,大多数游戏信息都存储在XML文件中,并在游戏需要时加载。

这个加载工作正常,但是因为它发生了一些文件变得相当大,所以加载可能需要几秒钟(我的电脑上现在约3秒,但我希望它变得更长)。所以我想添加一个包含进度信息的加载屏幕(至少是一个百分比的条形码)。

后面的部分让我感到困惑。这是我要求加载XML文件的代码:

public function load( a_FileName:String, a_Callback:Function, a_LoadingScreen:MovieClip ):void
{
    m_Callback = a_Callback;

    m_LoadingScreen = a_LoadingScreen;

    var t_URLLoader:URLLoader = new URLLoader();

    t_URLLoader.addEventListener( Event.COMPLETE, fileLoadComplete );
    t_URLLoader.addEventListener( ProgressEvent.PROGRESS, fileLoadProgress );


    t_URLLoader.load( new URLRequest( a_FileName ) );

}

在每个ProgressEvent.PROGRESS上调用以下代码

public function fileLoadProgress( e:ProgressEvent ):void 
{
    m_LoadingScreen.txtPercentage.text = Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%";


}

问题是我的程序似乎首先加载文件(忙时不做任何其他事情),然后才显示加载屏幕。

如果我在fileLoadProgress函数中添加了一个跟踪,我的输出窗口中会有很多更新,但屏幕不会更新。

使用MouseEvents时我知道你可以使用updateAfterEvent()函数来强制进行绘图调用,但是在使用ProgressEvents时我似乎无法使用此方法。

在加载xml文件时是否有任何强制我的屏幕更新的方法?

--- ---- EDIT

我做了一个小沙箱来进一步测试这个问题:一个FLA文件在第一帧上只有一个动态文本字段,代码如下:

var t_URLLoader:URLLoader = new URLLoader();

t_URLLoader.addEventListener( Event.COMPLETE, fileLoadComplete );
t_URLLoader.addEventListener( ProgressEvent.PROGRESS, fileLoadProgress );

t_URLLoader.load( new URLRequest( "data/TerritoryData.xml" ) );

stop();

function fileLoadProgress( e:ProgressEvent ):void 
{
    trace( Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%" );
    txtPercentage.text = Math.floor( ( e.bytesLoaded / e.bytesTotal ) * 100 ) + "%";
}

function fileLoadComplete( a_Event:Event ):void
{
    trace( "done!" );
    txtPercentage.text = "done!";
}

这就像我能做到的熊骨头一样,但它仍然显示出同样的问题。在我的输出窗口中,跟踪显示:

28% 56% 84% 100% 完成了!

但是在屏幕上它从空白变为“完成”。如果我在fileLoadProgress函数中放置断点,屏幕也不会更新。如果我在fileLoadProgress函数中关闭()URLLoader,它最终会得到一个“28%”文本。

有什么想法吗?这让我疯了......

2 个答案:

答案 0 :(得分:0)

您是否尝试过在第一帧中设置所有内容但是在第二帧中加载它?所以它实际上需要:

t_URLLoader.load( new URLRequest( "data/TerritoryData.xml" ) );
stop();

到第二帧。我认为txtPercentage不会在两者之间刷新。

答案 1 :(得分:0)

正如Dave Hart在原始问题的评论中提到的那样。答案是,除非加载xml文件来自外部网站,否则Flash不会更新屏幕。

在我的网站上使用XML,游戏会在文本字段中显示一个或两个更新,屏幕更新在两者之间停滞(我在后台使用了一个简单的动画来跟踪帧速率)。到目前为止,这仍然不是我在调试窗口中收到的跟踪输出量,但至少它表明它确实可以将内容输出到屏幕上,每秒更新一次。

也是我第一次尝试它,它似乎比后续工作更好,但这可能是由于文件暂时存储在本地?

不幸的是,由于我的文件将在本地加载,因此对我来说无用。所以我想我将不得不忍受任何没有动画的加载屏幕。