سؤال

أحاول إنشاء/استخدام محمل مسبق في تطبيقي المرن.أداة التحميل المسبق عبارة عن ملف SWF يحتوي على 100 إطار (إطار واحد لكل نسبة مئوية من تقدم أداة التحميل).أحاول بشكل أساسي تضمين ملف SWF هذا في تطبيقي وعرضه على الشاشة وتغيير رقم الإطار الذي يتم عرضه مع اكتمال التقدم.

الكود الموجود لدي حتى الآن هو (والذي يمتد Canvas):

[Embed("/../assets/preLoader.swf")]
private var SWFClass:Class;

private var _preLoader:MovieClip;

private var _progress:Number;

public function set progress(value:Number) : void {
    _progress = value;

    if(progress < 100) {
        _preLoader.gotoAndPlay(progress, null);
    }else {
        _preLoader.gotoAndStop(0, null);
    }
}   

[Bindable]
public function get progress() : Number {
    return _progress;
}



(Called on creationComplete event)          
private function init() : void {
    _preLoader = MovieClip(new SWFClass());

    this.addChild(_preLoader);

    _preLoader.play();
}

الخطأ الذي أحصل عليه هو:

TypeError: Error #1034: Type Coercion failed: cannot convert widgets::PreLoader_SWFClass@30b3be51 to mx.core.IUIComponent.at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:3259]

الرجاء المساعدة!

هل كانت مفيدة؟

المحلول

استخدم sprite بدلاً من Canvas كفئة أساسية.هناك سببان للقيام بذلك:

  1. يحتوي Canvas على الكثير من التبعيات (تصل قيمتها إلى أكثر من 100 ألف من المكونات المرنة).لا تريد الانتظار حتى يتم تحميل كل هذا قبل عرض أداة التحميل المسبق الخاصة بك

  2. Canvas عبارة عن حاوية UIComponent.استخدمه عندما تريد تخطيط UIComponents.في حالتك، لا تحتاج إلى منطق تخطيط قماشي معقد - كل ما تحتاجه هو عرض MovieClip.لذلك لا تستخدم قماش.

للإجابة على سؤالك الأصلي، يعد SWFLoader وImage مكونين من مكونات واجهة المستخدم التي تعرف كيفية عرض الصور النقطية وMovieClips.افعل شيئًا مثل هذا بدلاً من ذلك:

var img:Image = new Image();
img.source = _preloader;
this.addChild(img);

نصائح أخرى

وتحتاج إلى أن يكون مجمع على MovieClip التي تطبق IUIComponent من أجل أن تكون قادرة على تمرير إلى addChild(). من addChild() الوثائق :

<اقتباس فقرة>   

ملحوظة: في حين يتم تحديد الوسيطة الطفل إلى طريقة اعتبارا من نوع DisplayObject، التي يمكن ان تضاف حجة يجب تطبيق واجهة IUIComponent كتابع حاوية. جميع مكونات فليكس تنفيذ هذه الواجهة.

وسوف تحتاج إلى شيء من هذا القبيل:

public class MovieClipUIComponent extends UIComponent {
   public function MovieClipUIComponent (mc:MovieClip) {
      super ();

      mcHeight = mc.height;
      mcWidth = mc.width;

      // add your own magic

      addChild (mc);
   }
}

تحذير: كود لم تختبر، ينبغي أن تعطيك فكرة فقط

!

وهذا الأمل العمل حاولت ذلك.

[Embed(source="assets/yourSWF.swf", mimeType="application/octet-stream")]
public var SWF:Class;

_swfLoader = new Loader();
//nothing to do onComplete or onProgress method just to debug
// Add complete event listener
_swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
// Add progress event listener
_swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);


// Add error event listener. Critical if you don't want run time errors if there
// are problems loading the file.
_swfLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);

// Incase of loading Flex. Very important.
_swfLoader.addEventListener("mx.managers.SystemManager.isBootstrapRoot", systemManagerHandler);
_swfLoader.addEventListener("mx.managers.SystemManager.isStageRoot", systemManagerHandler);

// Load on the loader with a new URLRequest instance passing the path to
// it's constructor.
_swfLoader.loadBytes(new SWF());

// We have to addd the loader so it creation is done.
addChild(_swfLoader);

private function systemManagerHandler(e:Event):void {
            // Prevent default stops default behaviour here and thus stops some potential
            // run time errors.         
            e.preventDefault();
}

وإلقاء نظرة على و التحميل المسبق ل الطبقة و التحميل المسبق لل ملكا للتطبيق الطبقة.

وكما تقول الوثائق، يجب عليك بالتأكيد لا تمديد فليكس UIComponent (أو صورة أو SWFLoader) الطبقات لتحميل مسبق.

وفيما يلي بعض الأمثلة على كيفية التوجه نحو تخصيص التحميل المسبق لل:

HTTP: //www.pathf.com/blogs/2008/08/custom-flex-3-lightweight-preloader-with-source-code/

http://groups.adobe.com/posts/15d371c71d

HTTP: //www.webapper صافي / index.cfm / 2008/1/17 / فليكس NotSo-مخصص التحميل المسبق ل

ولقد وجدت أداة التحميل المسبق مخصصة باستخدام رمز فرنك سويسري خارجي من هذا الرابط
http://askmeflash.com/article_m.php؟p=article&id=7

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top