Поиск…


Основное адаптивное приложение

package
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;

    public class Main extends Sprite 
    {        
        //Document Class Main Constructor
        public function Main() 
        {
            //Sometimes stage isn't available yet, so if not, wait for it before proceeding
            if (!stage) {
                addEventListener(Event.ADDED_TO_STAGE, stageReady);
            }else {
                stageReady();
            }
        }
        
        protected function stageReady(e:Event = null):void {
            //align the stage to the top left corner of the window/container
            stage.align = StageAlign.TOP_LEFT;
            //don't scale the content when the window resizes
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            //listen for when the window is resized
            stage.addEventListener(Event.RESIZE, stageResized);
        }
        
        protected function stageResized(e:Event):void {
            //use stage.stageWdith & stage.stageHeight to repostion and resize items
        }   
    }
}

Выполняя длительные процессы и не получая безответственного приложения

Бывают ситуации, когда вам нужно вычислить что-то действительно большое в вашем приложении Flash, не прерывая работу пользователя. Для этого вам нужно разработать свой длительный процесс как многоэтапный процесс с сохраненным состоянием между итерациями. Например, вам необходимо выполнить фоновое обновление множества внутренних объектов, но если вы хотите обновить их все сразу простым for each (var o in objects) { o.update(); } , Flash ненадолго (или не так кратко) перестает отвечать на запросы пользователя. Таким образом, вам нужно выполнить одно или несколько обновлений для каждого кадра.

private var processing:Boolean;      // are we in the middle of processing
private var lastIndex:int;           // where did we finish last time
var objects:Vector.<UpdatingObject>; // the total list of objects to update
function startProcess():Boolean {
    if (processing) return false; // already processing - please wait
    startProcessing=true;
    lastIndex=0;
    if (!hasEventListener(Event.ENTER_FRAME,iterate)) 
        addEventListener(Event.ENTER_FRAME,iterate); // enable iterating via listener
}
private function iterate(e:Event):void {
    if (!processing) return; // not processing - skip listener
    objects[lastIndex].update(); // perform a quantum of the big process
    lastIndex++; // advance in the big process
    if (lastIndex==objects.length) {
        processing=false; // finished, clear flag
    }
}

Передовая обработка может включать использование getTimer() для проверки прошедшего времени и предоставления другой итерации, если время не закончилось, разделение update() на несколько функций, если обновление слишком велико, отображение прогресса в другом месте, настройка процесса итерации для адаптации к изменениям список объектов для обработки и многое другое.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow