تمرير المعلمات إلى المُنشئ لفئة أصول AS3 التي تم إنشاؤها تلقائيًا

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

سؤال

أقوم بإنشاء فئة فرعية لـ MovieClip (دعنا نسميها MyClip) التي أريد استخدامها للعديد من أصول المكتبة.سأقوم بإنشاء مثيل لمقاطع الفيلم هذه من كود ActionScript. MyClip يحتوي على معلمة منشئة تسمح له بتعيين القيم الأولية لخصائص معينة.

نظرًا لأنني أرغب في استخدامه لأصول مكتبة متعددة، يبدو أن الطريقة المنطقية للقيام بذلك هي تحديدها في مربع النص "الفئة الأساسية" في مربع الحوار "خصائص الرمز".تكمن المشكلة في أن الفئات الفرعية التي يتم إنشاؤها تلقائيًا لا تحتوي على مُنشئ مع المعلمة.بدلاً من ذلك، يحاول Flash إنشاء هذه العناصر باستخدام مُنشئ افتراضي فقط، وهو ما يفشل أيضًا بسبب MyClip لا يحتوي على منشئ افتراضي.

هل هناك أي طريقة للتغلب على هذا، بصرف النظر عن تأجيل تهيئة الخاصية إلى الطريقة العادية؟

يحرر: لم أكن واضحا بما فيه الكفاية، وسأحاول التوضيح هنا.إذا كان هذا هو MyClip فصل:

public class MyClip extends MovieClip
{
    private var someValue : Number;

    public function MyClip(someValue : Number)
    {
        this.someValue = someValue;
    }
}

وأنا حددت MyClip كفئة أساسية للرمز MyClipA في المكتبة، أود أن أكون قادرًا على القيام بذلك بشكل مثالي clip = new MyClipA(17); دون الحاجة إلى كتابة MyClipA صف نفسي.

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

المحلول

أفترض أن السبب وراء حاجتك إلى إنشاء فئات MyClipA وMYClipB وما إلى ذلك هو إرفاق أعمال فنية مختلفة بالكائنات التي تحتوي فقط على سلوكيات كائن MyClip؟

ربما يمكنك التعامل مع الأمر بشكل مختلف، وإنشاء فئتك الأساسية - MyClip كما هو الحال في مثالك، وقبول وسيطتين، إحداهما إشارة إلى الفن:

public class MyClip extends MovieClip
{
    public var art:ArtBaseClass
    private var someValue : Number;

    public function MyClip(someValue : Number, artClass:ArtBaseClass)
    {
        this.someValue = someValue;
        this.art = new artClass();
        this.addChild(art);
    }
}

ويمكنك تحديد أي شيء آخر تحتاجه في ArtBaseClass الذي يتم تطبيقه على كل كائن من عناصر المكتبة الفنية هذه.

نصائح أخرى

لا أعتقد أنه يمكن القيام بذلك حقًا.ولكن إذا كان من الممكن القيام بذلك، فسيكون ذلك بشكل صحيح مع النموذج الأولي.ربما يمكنك تغيير مُنشئ كل فئة من الفئات الافتراضية.

حاول تحديد الوسائط الافتراضية للمنشئ (null كقيمة خاصة، ربما؟).ثم قم بإضافة القليل من التحقق من الأخطاء في بداية المُنشئ الذي يقوم بتعيين الإعدادات الافتراضية المعقولة لـ MovieClip الخاص بك.إنه أمر مبتكر حقًا، ولكن على حد علمي لا توجد طريقة أفضل للقيام بذلك باستخدام واجهة مستخدم السحب والإفلات المتحركة (لا يمكنك القيام بذلك إلا من خلال التعليمات البرمجية).

إذا واجهت هذا أيضا.الطريقة الصحيحة لحلها هي إنشاء فئات لـ MyClipA وMyClipB ترث من MyClip.قد يكون هذا أمرًا مرهقًا إذا كان هناك الكثير من الفئات التي تعتمد على MyClip.ثم مرة أخرى، إذا كان الأمر كذلك، فقد ترغب في البدء في التفكير في استخدام التركيب بدلاً من الميراث على أي حال.

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