AS3 Использование контура здания в качестве предварительного загрузчика - PullRequest
1 голос
/ 14 апреля 2011

Мне было интересно, как сделать предварительный загрузчик, который построчно показывает контур здания.

Может ли кто-нибудь указать мне правильное направление или учебник? Спасибо

1 Ответ

2 голосов
/ 14 апреля 2011

Ну, у вас есть два решения:

Вспышка

Во Flash нарисуйте свой контур и отделите каждую линию, чтобы поместить его в мувиклип.Затем вы должны поместить каждый клип в отдельный слой (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]);
    }
}

И вуаля!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...