ActionScript 3
Responsive Application Design
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.