AS3使用建筑物轮廓作为预加载器

问题描述

我想知道如何进行预加载器,以逐步显示建筑物轮廓。 谁能指出我正确的方向或指南?谢谢     

解决方法

好吧,您有两种解决方案: 闪 在Flash中,绘制轮廓,并分隔每行以将其放入MovieClip。然后,您必须将每个剪辑放置在不同的图层上(Ctrl + A,右键单击->“分布到图层”)并对其进行排序。 在您的代码中,您必须隐藏每一行。
for (var iClip:int = 0; iClip < _house.numChildren; iClip++)
{
    _house.getChildAt(iClip).visible = false;
}
然后在您的代码中,您将有一个监听
ProgressEvent.PROGRESS
的函数,我们将其称为
onProgress
private function onProgress(event:ProgressEvent):void
{
    var totalClips:uint = _house.numChildren;
    var lastClipToShow:uint = Math.ceil(totalClips * event.bytesLoaded / event.bytesTotal);
    for (var iClip:int = 0; iClip < lastClipToShow; iClip++)
    {
        _house.getChildAt(iClip).visible = true;
    }
}
在此侦听器的每次调用中,您将显示从最深到总数的一小部分的每一行,与加载的数据量相匹配。 码 第二种解决方案将要求您以
Array
输入轮廓中每个线段的坐标。
private const HOUSEDATA:Array = [   [[0,0],[10,15]],[[25,354],[32,341]],[[321,54],[78,1]],[[534,5],[23,5]]
                                    ];
然后,再次在
onProgress
private function onProgress(event:ProgressEvent):void
{
    var totalSegments:uint = HOUSEDATA.length;
    var lastSegmentToShow:uint = Math.ceil(totalSegments * event.bytesLoaded / event.bytesTotal);
    graphics.lineStyle(1,0x0000FF);
    graphics.clear();
    for (var iSegment:int = 0; iSegment < lastSegmentToShow; iSegment++)
    {
        graphics.moveTo(HOUSEDATA[iSegment][0][0],HOUSEDATA[iSegment][0][1]);
        graphics.lineTo(HOUSEDATA[iSegment][1][0],HOUSEDATA[iSegment][1][1]);
    }
}
和瞧!