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
}
}
}
लम्बी प्रक्रियाएँ करना और अनुत्तरदायी आवेदन न मिलना
ऐसी स्थितियां हैं जब आपको अपने फ्लैश एप्लिकेशन में वास्तव में बड़ी गणना करने की आवश्यकता होती है, जबकि उपयोगकर्ता के अनुभव को बाधित नहीं करता है। इसके लिए, आपको पुनरावृत्तियों के बीच सहेजे गए राज्य के साथ एक बहु-चरण प्रक्रिया के रूप में अपनी लंबी प्रक्रिया को तैयार करने की आवश्यकता है। उदाहरण के लिए, आपको बहुत सी आंतरिक वस्तुओं का बैकग्राउंड अपडेट करने की आवश्यकता है, लेकिन यदि आप उन सभी को एक साथ एक साधारण 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()
का उपयोग getTimer()
गए समय की जांच करने के लिए और एक और पुनरावृत्ति की अनुमति देने के लिए यदि समय समाप्त नहीं हुआ है, तो अपडेट को विभाजित update()
कई कार्यों में अद्यतन करना यदि अपडेट बहुत लंबा है, तो कहीं और प्रगति प्रदर्शित करना, परिवर्तन की प्रक्रिया को अनुकूलित करने के लिए पुनरावृत्ति प्रक्रिया को समायोजित करना। प्रक्रिया के लिए वस्तुओं की सूची, और कई और अधिक।