Suche…


Responsive Basisanwendung

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
        }   
    }
}

Langwierige Prozesse ausführen und nicht mehr reagieren

Es gibt Situationen, in denen Sie etwas wirklich Großes in Ihrer Flash-Anwendung berechnen müssen, ohne die Benutzererfahrung zu unterbrechen. Zu diesem Zweck müssen Sie Ihren langwierigen Prozess als einen mehrstufigen Prozess mit gespeichertem Status zwischen den Iterationen auslegen. Sie müssen beispielsweise eine Hintergrundaktualisierung vieler interner Objekte durchführen. Wenn Sie jedoch alle Objekte auf einmal mit einem einfachen for each (var o in objects) { o.update(); } , Blinkt Flash (oder nicht so kurz) auf den Benutzer. Sie müssen also ein oder mehrere Updates pro Frame durchführen.

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
    }
}

Die erweiterte Verarbeitung kann die Verwendung von getTimer() , um die verstrichene Zeit zu überprüfen und eine weitere Iteration zuzulassen, wenn die Zeit nicht abgelaufen ist, das Aufteilen von update() in mehrere Funktionen, wenn die Aktualisierung zu lang ist, den Fortschritt an anderer Stelle anzuzeigen und den Iterationsprozess anzupassen, um ihn an die Änderungen des Systems anzupassen Liste der zu verarbeitenden Objekte und vieles mehr.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow