ActionScript 3
Responsiv applikationsdesign
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.