AS3

2011-12-07 12 views
6

में प्रीलोडर कैसे बनाएं मेरे फ़्लैश एप्लिकेशन थोड़ा बड़ा है, इसलिए मैं अपने एप्लिकेशन में एक प्रीलोडर एम्बेड करना चाहता हूं, तो क्या कोई मुझे बता सकता है कि नए 'दृश्य' में एक प्रीलोडर कैसे बनाएं और एक और दृश्य लोड करें प्रीलोडिंग के बाद पूरा हो गया?AS3

अग्रिम में धन्यवाद!

उत्तर

12

अद्यतन:

विकल्प 1. फ्लैश आईडीई, एक swf फ़ाइल

जब साथ संकलन एक एम्बेडेड preloader हो करने के लिए फ्लैश आईडीई, आपको अपने Document Class कोड को अपनी एफएलए फ़ाइल के दूसरे फ्रेम (निश्चित रूप से पैकेज और क्लास कन्स्ट्रक्टर के बिना) ले जाना चाहिए, और Document Class को हटाएं। गुण निकालें।

stop(); // stops the timeline at preloader frame 
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
function onProgress(e:ProgressEvent):void { 
    var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
    //additional code to update preloader graphics 
    //.. 
    if (percent == 100) onLoaded(); 
} 
function onLoaded() { 
    this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
    nextFrame(); 
} 

एक बार swf लोड किया जाता है, यह अगले फ्रेम करने के लिए अग्रिम और मूल आवेदन प्रवर्तन कोड निष्पादित किया जाना चाहिए: पहले फ्रेम में आप इस तरह के कोड से देना चाहिए। यह अच्छी तरह से काम करता है यदि आपने अपनी परियोजना को इस तरह से व्यवस्थित किया है कि अधिकांश संपत्तियां (छवियां, आदि) फ्लैश आईडीई लाइब्रेरी में हैं और पहले फ्रेम पर लोड नहीं हैं (आप प्रत्येक लाइब्रेरी आइटम की गुणों में इसे देख सकते हैं)।

विकल्प 2. फ्लैश आईडीई, दो SWF फ़ाइलें

एक अन्य विकल्प, पहले से ही एक और टिप्पणीकार द्वारा सिफारिश के रूप में, आपके आवेदन swf रखने के रूप में यह है, और एक अन्य हल्के swf कि पहले एक लोड होगा बनाने के लिए है । पहले फ्रेम में preloader.swf की कोड:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
loader.load(new URLRequest("path/to/application.swf")); 

function onProgress(e:ProgressEvent):void 
{ 
    var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
    //additional code to update preloader graphics 
    //.. 
    if (percent == 100) onLoaded(); 
} 
function onLoaded():void 
{ 
    loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
    var application:DisplayObject = loader.content; 
    addChild(application); 
} 

कभी-कभी इस दृष्टिकोण के साथ अतिरिक्त समस्या, जब आप अपने Document Class constructor आदि से stage तक पहुँचने का प्रयास कर रहे हैं, लेकिन ज्यादातर मामलों के लिए यह काम कर देना चाहिए।

विकल्प 3. विभिन्न आईडीई, मेरी सिफारिश:FlashDevelop

आप FlashDevelop, फ्लैश बिल्डर या किसी अन्य आईडीई के साथ अपने मूल पोस्ट कोड को संकलित करने की कोशिश की है, तो यह काम करना चाहिए।

मूल पोस्ट:

यहाँ एक एम्बेडेड preloader के लिए एक बुनियादी सेटअप है।आपका Document Class इस तरह दिखना चाहिए:

package { 

    import flash.display.Sprite; 

    [Frame(factoryClass='Preloader')] //class name of your preloader 

    public class Main extends Sprite { 

    public function Main() { 
     //init 
    } 
    } 
} 

Preloader कक्षा:

package { 

    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.events.ProgressEvent; 
    import flash.utils.getDefinitionByName; 

    public class Preloader extends MovieClip { 

    public function Preloader() 
    { 
     //add preloader graphics 

     //check loading progress 
     this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
    } 
    private function onProgress(e:ProgressEvent):void 
    { 
     var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
     if (percent == 100) 
     { 
      this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
      onLoaded(); 
     } 
    } 
    private function onLoaded():void 
    { 
     nextFrame(); //go to next frame 
     var App:Class = getDefinitionByName("Main") as Class; //class of your app 
     addChild(new App() as DisplayObject); 
    } 
    } 
} 
+0

OnProgress फ़ंक्शन को निष्पादित नहीं कर रहा है .... :( –

+0

आप किसी भी त्रुटि मिलता है? आप प्रीलोड करना और अपने 'दस्तावेज़ Class' के प्रारंभ के बारे में अपने कोड दिखा सकते हैं? – package

+0

नहीं मैं कोई त्रुटि संदेश और मेरा डॉक्यूम नहीं मिलता है एंट क्लास बिल्कुल वही है जैसा आपने कहा था। –

1

मैं "लाइटवेट एसएफएफ लोड एक भारी एसएफएफ" मार्ग जाने की सलाह देता हूं, क्योंकि यह सबसे कुशल है जिसे मैंने देखा है। वहां पर फुले हुए ट्यूटोरियल की बारीकी से हैं, लेकिन मेरे लिए मुझे यह पसंद है http://doogog.com/actionscript-3-external-preloader.html यह सीधे बिंदु पर है।

0

तुम भी दोनों आवेदन शुरू आवेदन फ़ाइलें लोड कर रहे हैं इससे पहले कि और जब तक पहले से लोड होने के लिए Greensock की तरह 3 पार्टी पुस्तकालय का उपयोग कर सकते हैं।

मैं व्यक्तिगत रूप से ग्रीन्सॉक का उपयोग करता हूं और इसकी अनुशंसा करता हूं। यह loaderInfo कक्षा के साथ कुछ बग हल करता है।

http://www.greensock.com/loadermax/

0

[फ़्रेम (factoryClass = 'Preloader')] अब नए एएससी 2.0 संकलक में काम करता है। इसके बजाए, प्रीलोडर आपकी दस्तावेज़ कक्षा बन जाता है, और आपको दूसरी फ्रेम पर अपनी मुख्य कक्षा को शामिल करने के लिए फ्लैश बताने के लिए अतिरिक्त कंपाइलर तर्क जोड़ने की आवश्यकता है (इसे प्रीलोडर में संदर्भित न करें):

-frame = NameDoesntMatter, मुख्य

Does ASC 2.0 recognize [Frame] metadata tags (ex: for Preloader factoryClass)?

ASC2.0 and Frame metatag