ActionScript 3
応答性の高いアプリケーション設計
サーチ…
基本レスポンシブル・アプリケーション
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(); }
、Flashは短時間(または短時間ではなく)ユーザーに反応しなくなります。したがって、フレームごとに1つまたは複数の更新を実行する必要があります。
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