1

我正在使用 Flash CS5 和 FlashDevelop 在 ActionScript 3 中构建游戏。我试图让游戏尽可能多地以数据驱动。所以大部分游戏信息都存储在游戏需要时加载的 XML 文件中。

此加载工作正常,但碰巧有些文件变得相当大,因此加载可能需要几秒钟(目前在我的 PC 上约为 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文件时有什么方法可以强制我的屏幕更新?

- -编辑 - -

我做了一个小沙箱来进一步测试这个问题:一个 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%”文本。

有任何想法吗?这让我发疯...

4

2 回答 2

0

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

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

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

于 2012-12-09T11:32:22.433 回答
0

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

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

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

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

于 2012-12-21T22:45:34.593 回答