问题描述
我想知道如何进行预加载器,以逐步显示建筑物轮廓。
谁能指出我正确的方向或指南?谢谢
解决方法
好吧,您有两种解决方案:
闪
在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]);
}
}
和瞧!