كيف قمت بتحديث لعبة الفلاش الخاصة بي



في هذا المنشور ، سأشارك كيف أحضرت لعبة الفلاش Frog Fractions إلى النظام الأساسي الحديث. نتيجة لذلك ، قمت بإنشاء منفذ آلي جزئيًا على Unity باستخدام Haxe. سيكون المنشور محل اهتمام أي شخص يحاول ترقية قاعدة بياناته البرمجية إلى Flash. سيحتوي المنشور على مفسدين حول بنية Frog Fractions: Game of the Decade Edition و DLC Hop's Iconic Cap .



بعد الضفدع الكسور 2 لم تجعلني الأغنياء، وقضيت حوالي سنة تفعل عقد العمل و رسم / النماذج . ثم حملت زوجتي ، وقررت أن الوقت قد حان للعثور على وظيفة حقيقية حتى أتمكن من إعالة أسرتي. قبل بداية GDC 2018 ، أنانشر تغريدة حول البحث عن وظيفة ، على أمل العثور على الأشخاص المناسبين في المؤتمر. تمت مقابلتي في عدة مواقع ، لكن الشيء الأكثر أهمية هو أنني تمكنت من إيجاد تمويل لمشروعي التالي.



كان المشروع على هذا النحو: إخفاء لعبة Frog Fractions التالية داخل Frog Fractions 1 وبيعها على Steam.



Frog Fractions عبارة عن 13 ألف سطر من التعليمات البرمجية في Actionscript 3 وتم إنشاؤها باستخدام مترجم Flex. أدركت أنه بعد إضافة محتوى remaster جديد ، سيتضاعف الحجم ثلاث مرات ، إلى حوالي 40 ألف سطر من التعليمات البرمجية. (واتضح أن تقديري كان دقيقًا تمامًا - فقد تبين أن رمز 28k C # و 3k سطر من النصوص للقطات المقطوعة / أشجار الحوار بالإضافة إلى اللعبة الأصلية.)



لقد فكرت في العديد من الخيارات الممكنة لمزيد من العمل:



  • AS3 Adobe AIR. , :

    • Frog Fractions 640x480. . 2012 , , 2020 Steam .
    • Flex , 10k , . 40k ? ( , , .)
    • Flash . AIR 2020 ? (, ! .)
    • , - . , Scaleform (The Banner Saga, Road Not Taken), , Scaleform - 2020 . (, 2018 Autodesk Scaleform, — UI.)
  • Flash VM -. Flash , . Ruffle. , ?
  • C#/Unity. .
  • : Flash, , Unity. , «-» . , , , Unity, Windows. ( , , , TCP- . Flash , , Unity, .)
  • Haxe OpenFL. as3hx AS3 Haxe, OpenFL Flash API. OpenFL , .


أريد أن أؤكد هنا أن كل هذه الأساليب استندت إلى حقيقة أن Frog Fractions كان في الأساس برنامجًا كتبته لترجمته إلى SWF. لا يمكنني الحكم على كيفية تطبيق الحل الخاص بي على لعبتك ، إذا كان مخططًا زمنيًا للرسوم المتحركة باستخدام الفلاش ، يتم توفير التفاعل من خلال البرامج النصية.



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



(ملاحظة لنفسي: أضف Lars Doucet إلى أرصدة اللعبة. لم أستطع تخيل مدى تأثيره على المشروع حتى أعدت قراءة مراسلاتنا.)



بعد أسبوع من التجربة ، تمكنت من تشغيل لعبة Frog Infarctions (لعبة كتبت فيها لعبة Sosa Sosovski لمدة 0 ساعة ) في محرر Unity. لم تكن النتيجة مثالية ، لكنها كانت كافية لفهم جدوى التنفيذ ، لذلك بدأت العمل في المشروع الرئيسي.



هذه هي الطريقة التي تحول بها سير العمل الخاص بي. يجب إجراء هذه العمليات مرة واحدة:



  • استخدم as3hx لتحويل الكود من AS3 إلى Haxe.
  • إذا لزم الأمر ، قم بتنظيف رمز as3hx الذي تم إنشاؤه يدويًا.


بعد ذلك ، قم بإجراء العمليات التالية بشكل متكرر:



  • قم بنقل قاعدة التعليمات البرمجية الخاصة بك إلى Haxe لاستخدام Unity API بدلاً من Flash API.
  • C#- Haxe Haxe C#. Haxe, UnityEngine.dll, API hx. Assembly-Csharp.dll C#, .
  • Unity.


كان الأسبوع الأول من العمل مملاً للغاية ، وكان عليك تنظيف التعبيرات التي تم تحديدها كـ 3hx على أنها غير متناسقة ، وإصلاح أخطاء المترجم التي أضافتها والتعامل مع مكالمات الإدخال / الإخراج. إصلاح الأخطاء في Haxe ليس مثاليًا ، لذلك كان هناك حوالي 30 خطأ في كل مرة حاولت فيها البناء ، بغض النظر عن مدى صعوبة المحاولة ، لذلك لم يكن لدي أي فكرة عن مدى قرب الانتهاء حتى يتم تجميع كل شيء بدون أخطاء. أيضًا ، يبدو لي أن as3hx مترجم بحث واستبدال ، وليس مترجمًا حقيقيًا مع ترجمة من وإلى AST ، لأنه يبدو أنه يضيف أخطاء مثل وضع الشفرة على الجانب الخطأ من الأقواس عندما تكون في يستخدم التحكم في التدفق نمطًا محددًا من الأقواس.



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



في هذه المرحلة ، تم تجميع الكود وتشغيله في محرك الوحدة ، ولكن بدون I / O. كانت الخطوة التالية هي إعادة إنشاء كل كود الإدخال / الإخراج باستخدام Unity API. استغرق هذا وتحويل المورد حوالي أربعة أشهر ، ويرجع ذلك أساسًا إلى وجود العديد من أنواع الموارد المختلفة في أجزاء الضفادع:



  • رسومات متجهة مرسومة في محرر Flash. لقد جعلته بدقة 4k ، مما أجبر AIR على بناء اللعبة الأصلية ، لكنني لم أفعل شيئًا أكثر من عرض إطارات الرسوم المتحركة وكتابتها في ملفات PNG. ثم ، باستخدام TexturePacker ، قمت بتجميعها في أوراق الرموز المتحركة .
  • , Flash Shape API. Flash , , Photoshop . . Unity . , , 9-slices, .
  • SVG, OpenClipArt.org. , , .
  • , Flickr. preserve details Photoshop, , 4k- , .
  • . , . , 4k. , , — !
  • . Flash- , Marching-Cubes . 4k, , . , .
  • , .
  • . 2015 Unboxing Story Unity API . 2018 . !
  • . .wav .
  • MP3 64kbps mono, , , Amazon S3, , OST.




كل شيء في remaster باستثناء تظليل ملء الشاشة وتشغيل الفيديو ، ويتم تقديم معظم القصة الجديدة باستخدام Graphics.DrawMesh يستدعي ، وليس ككائنات في الرسم البياني لمشهد الوحدة. لذا فإن السؤال هو ، هل الوحدة هي حقًا مناسبة لهذا المشروع؟



بينما كنت أنا و Craig Tympani نختار محرك Glittermitten Grove ، استقرنا على Unity نظرًا لدعمها الجيد عبر الأنظمة الأساسية ، لأن FNAلست جاهزًا بعد ، ولأن بناء محركك هو طريقة رائعة لعدم إنهاء اللعبة مطلقًا. في النهاية ، بينما شعرت بالحزن بسبب الدعم الثنائي الأبعاد الضعيف في Unity ، فقد سمح لنا بإصدار إصدارات لنظامي التشغيل Mac و Linux دون مشاكل تقريبًا ، وهو في رأيي نجاح كبير. (من المفترض أن الدعم ثنائي الأبعاد في Unity قد تحسن منذ عام 2015 ، لكنني لم أدرسه. Graphics.DrawMesh يعمل بشكل جيد بالنسبة لي. ربما حتى FNA لديها الآن خط أنابيب لمعالجة موارد العمل!)



بالنسبة لهذا المشروع ، اخترت Unity بشكل أساسي عن طريق القصور الذاتي - لم أرغب في دراسة محرك جديد ، لأنني اضطررت إلى تنفيذ مشروع البحث الموصوف أعلاه ؛ تدعم Unity جميع المنصات التي أردت نقل اللعبة إليها ، بما في ذلك وحدات التحكم.



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



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



من الجدير بالذكر أيضًا أنه إذا لم أخطط لتوسيع اللعبة الأصلية بشكل كبير وكنت أحاول فقط تجنب الموت باستخدام Flash ، فمن المحتمل أن يكون OpenFL أو AIR أو Ruffle خيارًا أكثر ذكاءً.



كان إطلاق اللعبة بمثابة توديعها. لقد استمتعت بالعمل في Flash. في ذلك الوقت ، كانت هذه هي أفضل طريقة لإظهار ألعابك للأشخاص بأقل جهد ويبدو أنهم سيعيشون إلى الأبد - لا تزال SWFs من التسعينيات تعمل بشكل لا تشوبه شائبة في أحدث مشغل Flash ، على الرغم من مرور عقود. مشاهدة العالم وهو يحاول الانتقال إلى HTML5 عندما كان من الواضح أنه لم يكن جاهزًا لذلك كان أمرًا مؤلمًا. (وبصراحة ، الأمور تزداد سوءًا وليس أفضل . أعتقد أن المتصفح لن يكون منصة قابلة للتشغيل مرة أخرى طالما أن مالكي المتصفحين الأكثر شيوعًا لديهم متاجر تطبيقات الهاتف الخاصة بهم.) لقد قمت بإنشاء جهاز إعادة تسجيل جزئيًا بسبب هذا. أنه أراد بيع لعبة جديدة ، ولكن أيضًا بدافع الرغبة الصادقة في الاحتفاظ بجزء من تاريخ اللعبة. شكرا لك لعودتك معي!



All Articles