فلاش الرسوم المتحركة في Unity3D من نقطة الصفر. الجزء الأول ، غنائي

في سلسلة المقالات هذه ، سوف أتحدث عن كيف ولماذا قررنا إنشاء الحل الخاص بنا لاستيراد Flash animation إلى Unity ، وحول تقنيات التحسين وعمليات التثبيت الداخلية للمكون الإضافي. لدي أيضًا الكثير من الأشياء الرائعة الأخرى لأخبرها: الأجزاء الداخلية من تنسيق SWF ، والميزات الخاصة لملحق محرر الوحدة والمسائل العامة للرسوم المتحركة. ستجد كل هذا في الداخل!




مقدمة


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


أنواع الرسوم المتحركة ثنائية الأبعاد


الآن ، دعونا نلقي نظرة على تقنيات الرسوم المتحركة الأكثر شعبية في الألعاب. سأدرس الرسوم المتحركة ثنائية الأبعاد فقط ، نظرًا لأن الرسوم المتحركة ثلاثية الأبعاد هي موضوع لمحادثة مختلفة تمامًا ، مع أساليبها وأدواتها. لا تتردد في تخطي هذا القسم إذا كنت على دراية جيدة بهذا الأمر (ثق بي ، لن يكون هناك أي كشف أو فتحات للعينين). كذلك ، إذا كنت هنا فقط لمشاهدة ميزات الرسوم المتحركة لـ Flash ، فستجدها في المقالة أدناه.


الإطار حسب الإطار الرسوم المتحركة


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


الايجابيات:


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


سلبيات:


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


خلاصة القول:


يعمل فقط مع إطارات الرسوم المتحركة الصغيرة والقليلة ، مما يجعله مثالياً لفن البيكسل والألعاب ذات الطراز القديم مثل NES .


فيديو للرسوم المتحركة


في الأساس ، الرسوم المتحركة للفيديو هي تأليف لجنون الإطار حسب الإطار. ونعم ، لا يزال يتم تطبيقه وأحيانًا بشكل صحيح. لقد طبقنا شيئًا كهذا في ألعاب Hidden Object للرسوم المتحركة الضخمة والمعقدة ، وأيضًا للقطع مع تلميح من الواقعية. أضف إلى برامج الترميز هذه مثل theora أو vp8 ، وستكون قادرًا على إنشاء فيديو رسوم متحركة لطيف جدًا (حتى مع تكوين ألفا ) خاص بك.


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

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


الرسوم المتحركة الهيكل العظمي


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


الايجابيات واضحة: لا يتعين علينا تخزين كل إطار للرسوم المتحركة كصورة منفصلة ، فقط القطع (على سبيل المثال ، أرجل وأذرع الشخصية) ، والتي سيتم نقلها بواسطة العظام. هناك بعض التطبيقات الرائعة حقًا لهذا النوع من الرسوم المتحركة مع أوقات تشغيل لمختلف المنصات والمحركات ، والتي تكون في متناول الجميع أو حتى مجانية: Spine و Spriter و Anima2D و DragonBones وغيرها. باستخدام الهيكل العظمي وميزاته ، يمكنك تحقيق مستوى نعومة لا يصدق من الرسوم المتحركة الخاصة بك عن طريق الاستيفاء من مواقف العظام. يمكنك أيضًا التبديل بين المشاهد وتناوبها حتى يمكنك خلط نوعين مختلفين من المشاهد: التصوير أثناء الجري والرماية أثناء الزحف وما إلى ذلك. لن أدرج كل إمكانيات الرسوم المتحركة الهيكلية ، لذلك عليك فقط أن تضع في اعتبارك أن هناك الكثير منها وأنها رائعة حقًا. أفضل أن أعطيك رابطًا لموقع Spine على الويب حيث يمكنك إلقاء نظرة فاحصة عليها جميعًا ، مع صور وأوصاف


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


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


الجدول الزمني للرسوم المتحركة


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


  • القدرة على إضافة وإدراج قطع جديدة في منتصف المشهد ؛
  • لا تزوير ولا عظام تكون أحيانًا غير ضرورية ؛
  • Adobe Flash (حاليا Adobe Animate ) الأقدم واختباره من خلال أداة الرسوم المتحركة لسنوات ؛ يمكن لعدد كبير من الرسوم المتحركة ، بطريقة أو بأخرى ، العمل معها ؛
  • القدرة على استخدام المشاهد القديمة عند نقل مشاريع Flash إلى Unity ، بما في ذلك المشاهد التي قمت بإنشائها في رسومات متجهة ، وليس فقط في خطوط المسح .

قد تسأل ، أليس فلاش ميتا؟ كلاعب متصفح - نعم ، ولكن كأداة للرسوم المتحركة ، لا يزال في اللعبة. وسأخبرك أكثر ، لا توجد بدائل لـ Flash الآن أو المتوقعة. هل هناك أي عيوب؟ بالتأكيد. والعيب الرئيسي هو ... أنها ليست الرسوم المتحركة الهيكل العظمي ، ها ها ها. لذلك ، نحن نفقد القدرة على مزج مشاهدنا مع بعضنا البعض ، ونعكس الحركات الحركية وبعض الميزات الأخرى التي لا يمكنك استخدامها إلا عند العمل مع الهياكل العظمية. ولكن لدينا خطوط زمنية داخل بعضها البعض ، وكذلك أقنعة خطوط المسح والناقلات! والرسامين مجرد حب الأقنعة! هنا تجدر الإشارة إلى أن Spine أضافت أيضًا خيار القطع مؤخرًا ، ولكن حتى الآن فهي هندسية فقط ومحدودة بشدة مقارنة بأقنعة Flash.


أنواع الرسوم المتحركة: ملخص


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

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


المعضلة وقرارنا بكتابة الحل الخاص بنا


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

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

حصلت على بعض التجارب الناجحة في كتابة ملحقات لـ Unity وتجربة صغيرة في تحويل مشاهد الرسوم المتحركة لـ Flash إلى التنسيقات الخاصة بي. لقد مر وقت طويل منذ آخر مرة ، ولكي نكون منصفين ، ولكن ما زلت أتذكره. في الوقت نفسه ، قررت أن أكتب كل هذا كمشروع للحيوانات الأليفة ، لذلك لن أعتمد على المشروع الرئيسي أو الشركة التي أعمل فيها. ودعونا نواجه الأمر ، من الجيد أن يكون لديك مثل هذا الإنتاج بنفسك. على أي حال ، كنت مسلحًا بمواصفات تنسيق SWF من 250 صفحة ، دخلت في المعركة.


خيارات التصدير


بالنسبة للمبتدئين ، دعونا نناقش الخيارات المتاحة لدينا لتصدير الرسوم المتحركة من Flash Editor. هناك عدد قليل من هؤلاء ، لكل منها مزاياه وعيوبه. نحن ذاهبون للذهاب أكثر من تلك الرئيسية.


تنسيق .XFL


في محرر الرسوم المتحركة لـ Flash ، يمكنك حفظ الملف المصدر بتنسيق .XFL غير مضغوط بدلاً من تنسيق .FLA المغلق بشكل افتراضي. الآن ، هذا التنسيق سهل الاستخدام ، لكن لا يحتوي على وثائق. بشكل أساسي ، يتكون من بعض الدلائل الفرعية ومجموعة كاملة من ملفات .XML التي تصف جميع حالات القصاصات المخزنة في الداخل. تنسيق الوصف بسيط للغاية ومفهوم ، كما ترون من المثال التالي:


static_clip.xml

<DOMSymbolItem name="static_clip" itemID="5c719f28-00000051" lastModified="1550950184"> <timeline> <DOMTimeline name="static_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" keyMode="9728"> <elements> <DOMBitmapInstance selected="true" libraryItemName="bitmap.png"/> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem> 
رابط المصدر

ما وصلنا إليه هنا هو هذا القصاصة ، static_clip بطبقة واحدة ، Layer_1 وإطار واحد يخزن صورة نقطية تسمى bitmap.png .


movie_clip.xml

 <DOMSymbolItem name="movie_clip" itemID="5c719f30-00000053" lastModified="1550950713"> <timeline> <DOMTimeline name="movie_clip"> <layers> <DOMLayer name="Layer_1" color="#00FFFF" current="true" isSelected="true"> <frames> <DOMFrame index="0" duration="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip"> <matrix> <Matrix tx="-50" ty="-50"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> <DOMFrame index="4" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="static_clip" centerPoint3DX="128.5" centerPoint3DY="127.5"> <matrix> <Matrix tx="100" ty="100"/> </matrix> <transformationPoint> <Point x="28.5" y="27.5"/> </transformationPoint> </DOMSymbolInstance> </elements> </DOMFrame> </frames> </DOMLayer> </layers> </DOMTimeline> </timeline> </DOMSymbolItem> 
رابط المصدر

يمكنك هنا مشاهدة وصف مقطع movie_clip ، والذي يتكون من إطارين أساسيين بهما الفهارس 0 و 4 على التوالي. في تلك الإطارات ، يتم تخزين static_clip بنا بواسطة الإحداثيين (-50;-50) و (100;100) . هنا توجد حركة بين الإطارات (رسم متحرك إجرائي ، في حالتنا هو مجرد تحول ، دون تحجيم وتدوير). وبالتالي ، يمكن حساب موضع مقطع ثابت بين الإطارات الرئيسية باستخدام الاستيفاء الخطي للإحداثيات التي نتخذها من هذه الإطارات.

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


  1. يمكن أن يكون التوين مختلفين للغاية ، كلاهما بسيط - مع الاستيفاء الخطي ، والأكثر تعقيدًا - مع وظائف مخصصة ورسوم بيانية لهذا الاستيفاء ؛ يتم تنفيذ الرسومات المتجهة تتحول على المراهقات فقط وفقا لقواعدهم ، مفهومة ل Macromedia و Adobe اللاعبين فقط ، والقواعد ؛
  2. يتم وصف الرسومات المتجهة ، مثلها مثل كل الرسوم المتحركة باستثناء الرسومات النقطية ، في ملف نصي. ، على سبيل المثال . هذا يعني أنك بحاجة إلى كتابة خط تنقيط خاص بك ، والذي ، نظرًا لطبيعة وتعقيد تنسيق المتجه في Flash ، لا يمكن القيام به ؛
  3. يجب أن تكون قواعد تشغيل الرسوم المتحركة ، بما في ذلك القواعد المتداخلة ، مكونة من نقطة الصفر. لا توجد وثائق لهذا ، وإجابات على أسئلة مثل متى وأي إطار يجب أن يتم عرضه ، ومتى ينطلق ، وعندما يتركه دون الاستيفاء ، سيتعين عليك معرفة ذلك بنفسك ، وفي نفس الوقت تحاول قم بتغطية جميع الحالات المحتملة أثناء إجراء الاختبارات ، والتي ، في اعتقادي ، هي تمرين غير تافه للغاية لحل عام وليس خاصًا.

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


مخطوطات .JSFL


هناك خيار آخر شبه عمل للحصول على معلومات حول الرسوم المتحركة الخاصة بنا ، حيث تسمح لك سكربتات .JSFL بتمديد محرر Flash ، والتفاعل مع بيئته ، وتعديل الرسوم المتحركة الخاصة بك ، وبالطبع الحصول على جميع المعلومات اللازمة حول الجداول الزمنية والطبقات والمقاطع والإطارات داخل . يتم استخدامه أيضًا من قبل الرسوم المتحركة لأتمتة العمليات المختلفة ، ولكن هذه في الواقع قصة مختلفة تمامًا. ككل ، يمتلك النهج كل عيوب الجانب السابق ، لذلك لن أتعمق فيه. اسمحوا لي أن أقول إنه يسمح لك بتصدير مشاهد الرسوم المتحركة الخاصة بك ، على سبيل المثال ، في شكل إطار على حدة ، لكننا نعلم أن هذا ليس ما سيفعله Jedi الحقيقي (ولكن بالطبع ، قد يتم ذلك في بعض مشاريع). سنعود إلى هذه النصوص في وقت لاحق ، عندما نناقش النهج الذي اخترته: لتنقيط رسومات المتجهات وتحسين المشاهد التي تم تصديرها.


تطبيق الهواء


هذا النهج يعمل حقًا ويمكن استخدامه كما ينبغي. ومع ذلك ، لم أختره ، لكنني سأخبرك بهذا الخيار ، فقط للسجل. جوهر هذا النهج هو أننا نقوم بإنشاء تطبيق AIR على Flash نفسه أو على الأصوليين ، على سبيل المثال ، على Haxe . سيقوم هذا التطبيق باستخراج جميع المعلومات من مشاهد الرسوم المتحركة التي قمت بتجميعها بالفعل في تنسيق SWF. في التطبيق ، نلعب إطار المشهد حسب الإطار ، ونحصل على جميع المعلومات حول الإطارات ونحفظها بالتنسيق الأنسب لوقت التشغيل لدينا. باستخدام هذه الطريقة ، نعالج جميع المشكلات التي ذكرتها أعلاه:


  • لا نحتاج إلى تنقيط رسومات المتجهات لدينا ، حيث سيتم ذلك عن طريق وقت تشغيل الفلاش. الشيء الوحيد المتبقي لنا هو الحصول على هذه المعلومات وحفظ الإخراج النقطي لقطع ناقلاتنا ؛
  • لا يتعين علينا اختراع قواعد التشغيل والتعامل مع الاستكمال tween المخصص ، فإن Flash Player المدمج في تطبيق AIR يعرف تمامًا كيف ينبغي القيام به ويعمل بشكل أساسي لنا ؛

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


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


مشغل الفلاش الخاص بك


ربما يكون هذا هو الخيار الأكثر إنصافًا وواضحًا وواضحًا بين جميع الخيارات ، ولكنه أيضًا الخيار الأكثر صعوبة. في النهاية ، هذا ما يفعله مشغل Flash الحقيقي ، الذي قام معظمنا بتثبيته في المتصفح المفضل كإضافة. الآن ، الممثلون المشهورون لهذا النوع هم: gameswf و ، ولدت من أول واحد ، مقياس الرسم . كلاهما مات اليوم. إن ما يميزها هو أنها كانت تستخدم في الغالب في تطبيقات واجهة المستخدم الرسومية في مختلف المشاريع بما في ذلك AAA . لكن مصلحتنا هي في الداخل ، وليس تطبيقات المكتبات الميتة.


يحتوي أي مشغل Flash لائق على شيئين مهمين على الأقل مخبئين في الداخل:


  • محلل تنسيق SWF ؛
  • مكافحة ناقلات الرسومات
  • آلة افتراضية لإطلاق أكشن من الكود ؛
  • مكتبة قياسية لرمز مخصص ؛

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


نعم ، الإنترنت مليء بمحاولات تنفيذ كل جزء من هذه الأجزاء ، بدرجات متفاوتة من الإحراج والتهور. لكن لا يمكنك حتى أن تأخذ هذه التطورات كأساس لأشياءك الخاصة لأنك ستضطر إلى قضاء سنوات فقط في صيد الحشرات. سيكون عليك أيضًا إضافة جميع اختبارات الوحدة غير المكتوبة قبل أن تدرك أنك لن تتمكن أبدًا من التنفيذ الكامل لكل شيء صغير. هؤلاء الرجال الذين حاولوا إضافة القدرات اللازمة إلى gameswf سوف يفهمون ما أتحدث عنه. يجب على مشغل Flash العادل أيضًا تنقيط رسومات المتجهات بشكل غير مسبق ، ولكن في وقت التشغيل ، مما سيؤثر بشكل كبير على الأداء الذي لا يستطيع كل مشروع إنجازه. بالمناسبة ، أريد أن أقول مرحبًا للناجين الذين حاولوا استخدام scaleform على الأجهزة المحمولة. على أي حال ، هذه هي الطريقة الأكثر جدية واليأس ، وهي بالتأكيد ليست خيارنا.


الجمع بين النهج


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


أولاً ، سنستخدم مشهد الرسوم المتحركة الذي تم تجميعه في SWF ، بحيث لا نخترع العديد من خيارات التشغيل ولا نفكر أبدًا في الطريقة التي يعمل بها مشغل Flash في الداخل ، نظرًا لأنه لا يمكننا تغطية جميع الحالات ، لكننا ما زلنا تبحث عن الحل العام. وأيضًا ، يتخلص محرر Flash من جميع الشابات الذين استخدمناهم في الرسوم المتحركة الخاصة بنا ، مما يعطينا فقط المواضع العارية للقطع في SWF المترجمة.


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


بعد ذلك ، نتخلص من كتابة rasterizer الرسومات الخاصة بنا ، حيث لا يمكننا كتابتها للحالة العامة ولتغطية كل خيار وإمكانية المتجه في Flash. بدلاً من ذلك ، سنقوم بتنقيط رسوماتنا قبل (!) التحويل البرمجي باستخدام برنامج نصي JSFL. وفي الوقت نفسه ، باستخدام هذا البرنامج النصي بالذات ، سنقوم بتحسين رسومات المتجهات الخاصة بنا من خلال دمج مقاطع ثابتة في صورة واحدة ، وتكبير الصور النقطية الناتجة داخل أو خارج من أجل أولويتنا الخاصة: الجودة و / أو الأداء. ومن الجدير أيضًا هنا مراعاة خيارات جودة / دقة الفن للأجهزة ذات الكثافة المختلفة للشاشة بكسل (على سبيل المثال ، HD و SD الفن).


اختتام الجزء الغنائي


هذا يختتم الجزء الأول من مقالتي. في المرحلة الثانية ، سنناقش تفاصيل التنفيذ التقني ، وشظايا الكود ، والصور (!) ، والتحسين ، والحيل والقرص. قريباً ، لا تفوت!

Source: https://habr.com/ru/post/ar445102/


All Articles