Buscar..


Solicitud de respuesta básica

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

Realiza procesos largos y no consigue aplicaciones que no responden.

Hay situaciones en las que necesita calcular algo realmente grande en su aplicación Flash, sin interrumpir la experiencia del usuario. Para esto, necesita diseñar su largo proceso como un proceso de varios pasos con estado guardado entre iteraciones. Por ejemplo, debe realizar una actualización en segundo plano de muchos objetos internos, pero si desea actualizarlos todos a la vez con un simple for each (var o in objects) { o.update(); } , Flash brevemente (o no tan brevemente) deja de responder al usuario. Por lo tanto, debe realizar una o varias actualizaciones por fotograma.

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

El procesamiento avanzado puede incluir usar getTimer() para verificar el tiempo transcurrido y permitir otra iteración si el tiempo no se agotó, dividiendo update() en varias funciones si la actualización es demasiado larga, mostrando el progreso en otros lugares, ajustando el proceso de iteración para adaptarse a los cambios del Lista de objetos a procesar, y muchos más.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow