Sök…


Grundläggande responsiv applikation

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

Att genomföra långa processer och inte få svar utan ansökan

Det finns situationer när du behöver beräkna något riktigt stort i din Flash-applikation, medan du inte avbryter användarens upplevelse. För detta måste du utforma din långa process som en flerstegsprocess med sparat tillstånd mellan iterationer. Till exempel måste du utföra en bakgrundsuppdatering av många interna objekt, men om du vill uppdatera dem samtidigt med en enkel for each (var o in objects) { o.update(); } , Flash kort (eller inte lika kort) svarar inte för användaren. Så du måste utföra en eller flera uppdateringar per ram.

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

Avancerad bearbetning kan inkludera användning av getTimer() att kontrollera förfluten tid och tillåta en ny iteration om tiden inte slut, dela update() i flera funktioner om uppdateringen är för lång, visar framsteg någon annanstans, justera iterationsprocessen för att anpassa sig till ändringar i lista över objekt som ska bearbetas och många fler.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow