في فليكس/AS3, كيف يمكنني الحصول على تعريف الفئة من جزءا لا يتجزأ من الأصول مع getDefinitionByName

StackOverflow https://stackoverflow.com/questions/87557

سؤال

لدي الدرجة مع العديد من جزءا لا يتجزأ من الأصول.

داخل الطبقة ، أود الحصول على تعريف الفئة من الأصول بالاسم.لقد حاولت استخدام getDefinitionByName () ، وأيضا ApplicationDomain.currentDomain.getDefinition() ولكن لا تعمل.

على سبيل المثال:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    var ClassDef:Class = getDefinitionByName(name) as Class;  //<<-- Fails
    _image = new ClassDef() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");
هل كانت مفيدة؟

المحلول

هذا لا يجيب على سؤالك ولكن قد حل المشكلة الخاصة بك.وأعتقد أن تفعل شيئا من هذا القبيل يجب أن تعمل:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    _image = new this[name]() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");

أواجه صعوبة في تذكر إذا قوس منهج يعمل على اغلاق الطبقات.إذا كان لا, الحل بسيط هو علامة الفئة كما ديناميكية.

نصائح أخرى

أن سبب هذا الأسلوب لا يعمل لأن "Image1Class" هو متغير اسم وليس الفعلي اسم الفئة.

يمكنك الحصول على اسم الفئة مثل هذا

import flash.utils.getQualifiedClassName;
trace(getQualifiedClassName(Image1Class));

وهو كما ترى, يعني اسم الفئة (واحد التي يجب تمريرها إلى الدالة) هو شيء من هذا القبيل MyClass_Image1Class.

أنت لا تحتاج إلى استخدام أي يتوهم getDefinitionByName() الأساليب ببساطة الرجوع إليه بشكل حيوي.في حالة استبدال 'فشل' خط مع:

var classDef:Class = MyClass[name] as Class;

و التي ينبغي أن تفعل ذلك.

شكرا جزيلا لك!لقد قضيت ما يقرب من 5 ساعات في محاولة للحصول على نقاط البيع getDefinitionByName للعمل مع getQualifiedClassName أن كنت على استعداد لرمي الاشياء!!بلدي العمل النهائية رمز يبدو مثل هذا حتى يحصل على اسم سلسلة من صفيف.

CreatureParam هو فندق 2 dimentional مجموعة من سلاسل ؛

نوع عدد صحيح التي يتم إرسالها إلى فلاش HTML الوسم الذي هو بدوره يأتي من قاعدة بيانات MYSQL بواسطة PHP.

Mark1_cb هو تحرير وسرد على مرحلة ولها اسم مثيل.أنه خرج هو أيضا عدد صحيح.

لذلك هذا الكود مباشرة دون الواردات فئة "BirdBodyColor_mc" خارجي swf "ArtLibrary.فرنك سويسري".BirdBodyColor_mc هو movieclip التي تم إنشاؤها من الصور بابوا نيو غينيا.ملاحظة يجب أن انقر نقرا مزدوجا فوق movieclip في ArtLibrary.fla و إدراج المفتاح الثاني الإطار.Movieclips على ما يبدو بحاجة إلى إطارات اثنين أو فلاش يحاول استيراد على أنها العفريت و أسباب عدم تطابق نوع.

[تضمين(المصدر="ArtLibrary.swf" رمز="BirdBodyColor_mc")] فار BirdBodyColor_mc:الطبقة ؛

عادة أنا من شأنه أن يضع مثيل من هذه movieclip فئة على المسرح باستخدام هذه التعليمة البرمجية.

myMC:MovieClip = new BirdBodyColor_mc();addChild(myMC);

فار التعريف:Class = هذا["BirdBodyColor_mc"] حسب الفئة ، فار Mark1:MovieClip = تعريف جديد();

ولكن كنت بحاجة إلى القيام بذلك باستخدام سلسلة القيمة بحثت في الصفيف.حتى هنا هو رمز لذلك.

فار التعريف:Class = هذا[CreatureParam[نوع][Mark1_cb + 2]] كما الدرجة ؛ فار Mark1:MovieClip = تعريف جديد();

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