ما هو أفضل أسلوب لنقل مشروع موجود مسبقًا من Flash 7/AS2 إلى Flex/AS3؟

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

سؤال

لدي قاعدة بيانات كبيرة تستهدف Flash 7، مع ملف كثير من فئات AS2.آمل أن أتمكن من استخدام Flex في أي مشاريع جديدة، ولكن هناك الكثير من الأشياء الجديدة في خريطة الطريق الخاصة بنا وهي عبارة عن إضافات إلى الكود القديم.

بناء جملة AS2 وAS3 هو نفسه بشكل عام، لذلك بدأت أتساءل عن مدى صعوبة نقل قاعدة التعليمات البرمجية الحالية إلى Flex/AS3.أعلم أن جميع العناصر المتعلقة بواجهة المستخدم ستكون غير واضحة (حاليًا يتم إنشاء واجهة المستخدم في وقت التشغيل مع الكثير من العناصر createEmptyMovieClip() وattaMovie())، ولكن يتم فصل عناصر واجهة المستخدم ووحدة التحكم/النموذج في الغالب.

هل حاول أي شخص نقل قاعدة بيانات كبيرة من كود AS2 إلى AS3؟ما مدى صعوبة ذلك؟ما هي أنواع المزالق التي واجهتها؟هل هناك أي توصيات بشأن طرق القيام بهذا النوع من المشاريع؟

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

المحلول

بعض المشكلات الملحوظة التي رأيتها عند محاولة تحويل عدد كبير من فئات AS2 إلى AS3:

تسمية الحزمة

class your.package.YourClass
{
}

يصبح

package your.package
{
    class YourClass
    {
    }
}

الواردات مطلوبة

يجب عليك استيراد أي فئات خارجية مستخدمة بشكل صريح - فالإشارة إليها باسمها المؤهل بالكامل لم تعد كافية.

لا يمكن تصنيف أساليب الواجهة على أنها "عامة"

وهذا أمر منطقي تمامًا، ولكن AS2 سيسمح لك بالقيام بذلك، لذا إذا كان لديك أي منها فسوف تحتاج إلى إزالتها.

الكلمة الأساسية "تجاوز" الصريحة

يجب الإعلان عن أي وظائف تتجاوز دالة الفئة الأصلية باستخدام الملحق تجاوز الكلمة الأساسية تشبه إلى حد كبير لغة C#.وعلى نفس المنوال، إذا كان لديك واجهات تعمل على توسيع واجهات أخرى وإعادة تعريف الوظائف، فيجب إزالة هذه التجاوزات (مرة أخرى، كما هو الحال مع عام، لم يكن هذا الترميز منطقيًا على أي حال ولكن AS2 يتيح لك القيام بذلك).

لقد تغيرت جميع عناصر الفلاش المضمنة

لقد أشرت إلى هذا أعلاه، لكنه الآن flash.display.MovieClip بدلا من مجرد فيلم كليب, على سبيل المثال.هناك الكثير من التفاصيل في هذه الفئة، ولم أتمكن من العثور عليها جميعًا، ولكن سيكون هناك الكثير من الإزعاج هنا.

خاتمة

لم أتمكن من العمل على هذا التحويل إلى حد النجاح، لكنني تمكنت في غضون ساعات من كتابة أداة C# سريعة تتعامل مع كل جانب من جوانب هذا باستثناء تجاوز الكلمة الرئيسية.يمكن أن تكون أتمتة عمليات الاستيراد أمرًا صعبًا - في حالتي، تبدأ جميع الحزم التي نستخدمها ببضعة حزم على مستوى الجذر بحيث يسهل اكتشافها.

نصائح أخرى

في البداية، آمل أنك لا تستخدم eval() في مشاريعك، حيث لا يوجد ما يعادلها في AS3.

أحد الأشياء التي سأفعلها هو المرور دليل ترحيل Adobe (والتي هي في الأساس مجرد قائمة مفصلة لما تم تغييره) عنصرًا تلو الآخر وحاول معرفة ما إذا كان يمكن تغيير كل عنصر من خلال عملية بحث واستبدال بسيطة (ربما باستخدام التعبير العادي) أو ما إذا كان من الأسهل تعديل الأحداث يدويًا لتتوافق مع AS3.ربما في كثير من الحالات (خاصة، كما قلت، إذا كانت كمية التعليمات البرمجية التي سيتم ترحيلها عالية جدًا) فمن الأفضل أن تقوم بكتابة التغييرات (على سبيل المثال.باستخدام بحث واستبدال regex) وإصلاح أي حالات حدودية حيث فشلت التغييرات التلقائية يدويًا.

كن مستعدًا لتخصيص بعض الوقت جانبًا لإجراء القليل من التصحيح وتشغيل بعض حالات الاختبار أيضًا.

وأيضًا، كما ذكر آخرون بالفعل، فإن محاولة دمج ملفات AS2 SWF مع ملفات AS3 SWF ليست فكرة جيدة ولا تعمل حقًا، لذلك سيتعين عليك بالتأكيد ترحيل جميع التعليمات البرمجية في مشروع واحد مرة واحدة.

فيما يلي بعض المراجع الإضافية للانتقال من AS2 إلى AS3:

مجموعة شرائح ورشة عمل Grant Skinners التمهيدية AS3http://gskinner.com/talks/as3workshop/

لي بريملو:6 أسباب لتعلم أكشن سكريبت 3http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

كولين موك:الإصدار الأساسي ActionScript 3 (يعتبر "الكتاب المقدس" لمطوري ActionScript):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

غرف مايك

Mesh@adobe.com

لقد كانت تجربتي أن أفضل طريقة للانتقال إلى AS3 هي على مرحلتين - الأولى من الناحية الهيكلية، والثانية من الناحية النحوية.

أولاً، قم بجولات من إعادة البناء حيث تقيم في AS2، ولكن اقترب من بنية AS3 قدر الإمكان.يتضمن هذا بطبيعة الحال نقل جميع البرامج النصية للإطارات والبرامج النصية #include إلى الحزم والفئات، ولكن يمكنك القيام بأشياء أكثر دقة مثل تغيير جميع مستمعي الأحداث والمرسلين لمتابعة تدفق AS3 (باستخدام خصائص الفئة الثابتة لأنواع الأحداث، والتسجيل حسب الطريقة وليس حسب الكائن).ستحتاج أيضًا إلى التخلص من جميع الأحداث "المضمنة" (مثل onEnterFrame)، وستحتاج إلى إلقاء نظرة فاحصة على تفاعل الماوس غير التافه (مثل السحب) وتفاعل لوحة المفاتيح (مثل اكتشاف ما إذا كان يتم الضغط على المفتاح).يمكن تنفيذ هذه المرحلة بشكل تدريجي.

المرحلة الثانية هي التحويل من AS2 إلى AS3 - تغيير "_x" إلى "x"، وجميع واجهات برمجة التطبيقات، وما إلى ذلك.لا يمكن القيام بذلك بشكل تدريجي، ما عليك سوى القيام بقدر ما تستطيع بضربة واحدة ثم البدء في إصلاح جميع أخطاء الترجمة.لهذا السبب، كلما زاد ما يمكنك القيام به في المرحلة الأولى، كلما تجنبت المزيد من الألم في المرحلة الثانية.

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

كانت أكبر المزالق بالنسبة لي هي الأجزاء التي تتطلب الكثير من إرفاق MovieClips وتكرارها ونقلها وتغيير أعماقها وما إلى ذلك.لا يمكن حقًا إعادة تصميم كل هذه الأشياء لتبدو مثل AS3؛عليك فقط دمج كل ذلك في طريقة تفكير أحدث ثم البدء في إصلاح الأخطاء.

ملاحظة أخيرة - لن أقلق حقًا بشأن أشياء مثل عبارات الاستيراد والتجاوز، على الأقل ليس إلى حد أتمتتها.إذا فاتتك أي منها، فسيتم اكتشافها بواسطة المترجم.ولكن إذا فاتتك المشاكل الهيكلية، فسوف تعاني من المزيد من الألم.

سيكون ترحيل مشروع أكبر مثل هذا من as2 أكثر من مجرد بحث واستبدال بسيط.بناء الجملة الجديد مشابه إلى حد ما وسهل التكيف (كما ذكر lilserf) ولكن إذا لم يكن هناك شيء آخر، فإن حقيقة أن as3 أكثر صرامة وأن نموذج الحدث الجديد من المرجح أن يسبب الكثير من المشاكل.من المحتمل أن تكون أفضل حالًا بإعادة كتابة كل شيء تقريبًا من الصفر، وربما باستخدام الكود القديم كدليل.

إن الهجرة من as2 -> as3 من حيث المعرفة أمر بسيط إلى حد ما.إذا كنت تعرف كائن التوجه as2، فإن الانتقال إلى as3 لن يكون مشكلة على الإطلاق.

لا يزال يتعين عليك استخدام mxml لواجهة المستخدم الخاصة بك إلا إذا كنت تريد ذلك على وجه التحديد.يوفر Mxml فقط طريقة سريعة لإنشاء واجهة المستخدم (وما إلى ذلك) ولكن إذا كنت تريد القيام بذلك بنفسك باستخدام actionscript فلا يوجد شيء يمنعك (قد يكون هذا أيضًا أسهل إذا كان لديك بالفعل واجهة المستخدم هذه في كود as2).Flex (Builder) هو مجرد وسيلة سريعة للقيام بأشياء قد لا ترغب في القيام بها بنفسك، مثل إنشاء واجهة المستخدم وربط البيانات، ولكنها في الأساس مجرد إنشاء جزء من ملف .swf لك -- ليس هناك سحر في ذلك؛)

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