수색…


기본 응답 성 응용 프로그램

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(); } , 플래시가 짧게 (또는 짧게) 사용자에게 반응하지 않게됩니다. 따라서 프레임 당 하나 또는 여러 개의 업데이트를 수행해야합니다.

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