ما هو غير ذلك Defold وما الذي يؤكل معه؟

الصورة

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

قليلا من المداعبة


لذلك ، يعد Defold محركًا صغيرًا نسبيًا (منذ عام 2011) ، عبر منصة مع محرر بصري مشابه لـ Gobot أو Construct أو Cocos Cover. إنه مخصص بشكل أساسي لثنائي الأبعاد (لا تزال هناك أدوات غير كافية للعمل مع 3D) ، لغة البرمجة هي Lua. يختلف عن محركات مماثلة في أداء مستقر على الهاتف المحمول (حتى 60 إطارًا في الثانية بدون تأخيرات مع صوت) ، وحجم بناء صغير (2-4 ميغابايت اعتمادًا على النظام الأساسي) ، ونظام gui and go مناسب ، وإعدادات رسوم متحركة رائعة (منحنيات المفاتيح) ، وأيضًا بشكل كامل محرر (سأخبرك أدناه ، دسيسة). على الموقع ، تحت الحساب ، من الممكن تخزين ملفات المشروع. يمكن لأي عضو في الفريق المصرح له إجراء تغييرات على المشروع ، وهو أمر ملائم بشكل عام ، على الرغم من أنني لا يمكنني دائمًا استخدامه ، لأنه وكيلنا العامل لا يمنح المحرر الوصول. يحتوي Defold على ميزات في كتابة التعليمات البرمجية ، على الرغم من أنني سوف آخذها إلى السلبيات (التفاصيل أدناه). ونعم ، لقد نسيت تقريبا ، فريق Defold سريع الاستجابة ويستحق الاحترام. طلبت من المنتدى المساعدة عدة مرات - على الفور ، في غضون 10 دقائق أجابوا وساعدوا. بمجرد أن حدثت مشكلة عند بدء تشغيل المحرر على Ubuntu ، لم يتمكن الرجال من المساعدة في البداية ، ولكن بعد بضع ساعات اتصل بي قائدهم وحل المشكلة. اتضح أنه في لينكس يوجد خطأ مع حطب الوقود القياسي على الفيديو ، لذلك تحتاج إلى تثبيت تلك الأصلية. أيضا على الموقع هناك أصول ، حيث بدونها. حسنًا ، لننهي المقدمة ، دعنا نذهب!

دعنا نبدأ!


نسجل ونحرر محرر Defold الإصدار 2 على موقع الويب (لم يعد 1 مدعومًا) ، وننشئ مشروعك الخاص هناك ونقوم بتنزيله. يتم بعد ذلك تخزين المشروع على الموقع ، أو محليًا (إذا كنا نخشى أن يختلس Defold الماكر). بعد ذلك ، افتح مشروعك من خلال المحرر (سيكون هناك خاصتي في الصور) ، انظر:



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



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



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

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



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



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



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

إنشاء NPC:



يقوم المثيل الداخلي للبرنامج النصي بتغيير خصائصه (التفرد من خلال الذات):



والآن تعمل الحملان بسرعات مختلفة:



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

أما بالنسبة للجسيمات ، فهناك راحة - إذا حددت باعثًا في نافذة المحرر واضغطت على مفتاح المسافة ، يمكنك رؤية النتيجة على الفور.

حسنًا ، الآن حول كيفية عمل المحرك


يقبل Defold فرعين منفصلين للعرض ، وهما GUI و GO.

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

GO عبارة عن كائن لعبة (شيء مثل عقدة التحويل) ، ويحتوي على معلومات حول الحركة والدوران والقياس وما إلى ذلك. في الداخل ، يأخذ كل شيء ، بما في ذلك GOs الأخرى. تُستخدم في المجموعات ، وهي غلاف مطلوب لأي عدد من الكائنات (مثل المجموعة).

بعد ذلك ، يبدأ المرح. انتقلت إلى Defold من Android Studio ودية مع Libgdx ، وهذا ما صدمني: لا يمكن الوصول إلى الأشياء مباشرة ، فقط من خلال طرق العكاز أو الرسائل التي لا تزال لا تمنح الحرية الإبداعية ، هناك قيود خطيرة. إذا قارنت مع نفس Libgdx ، يمكنني حتى إعادة كتابة الصف الحالي من مكتبة Lieb بهدوء والإشارة إليه بالفعل. في Defold ، للأسف ، تستخدم ما لديك ، وإذا كان هناك شيء مفقود ، اطلب من المطورين إضافة الوظيفة اللازمة ، أو أنك تبحث عن حل بديل. على سبيل المثال ، عند العمل مع الصوت ، لا يمكنك معرفة ما إذا كان التشغيل قد انتهى! اضطررت إلى إضافة عكاز يتعرف على مدة الصوت من ملف التشغيل. أما بالنسبة لـ Box2D المبسط (بدأ النقد فجأة) ، فقد اختفت الأساليب المجيدة للكشف والمعالجة قبل وأثناء وبعد التصادم من هناك! بدلاً من ذلك ، تصل رسالة إلى النص البرمجي ، الموجود في نفس GO مع الجسم المادي (وليس دائمًا كل إطار ، خاصة على إطار الجوال) بمعلومات حول التصادم ، وهذا كل شيء. أيضا ، لا يمكن للمرء تحريك الجسم إذا كان ماديا ، يمكن أن يكون فقط حركية ، ولا يمكن تغيير هذه الخاصية أثناء التنفيذ. لا يمكن تحجيم GO معًا مع الجسد المادي ، في المحرر سيغير المقياس بالنسبة لك ، ولكن ليس في اللعبة (كما وعدوا بإصلاحه). لا يمكن تحجيم GO إلى ناقص (على سبيل المثال ، المرآة بواسطة X) ، كل شيء سيعمل في المحرر ، ولكن في التنفيذ سيعود إلى الأصل. بشكل عام ، تمردت قليلاً حول هذا الموضوع و (بعد حل هذه المشاكل من خلال العكازات) ، هدأت ، لا تزال سرعة Defold ومحرره تفوق الفرامل Libgdx (سيغفر لي القراء ذاتي!) وعدم وجود محرر عادي (أتذكر بطريقة أو بأخرى ليب محرر الخرائط في Autodesk Maya ، لكن هذه قصة أخرى ...).

طريقة msg.post () وكيفية الارتباط بها


بشكل عام ، يحتوي كل كائن على عنوان url (على سبيل المثال ، "main: / main_pers # spine_anim") ، والذي يمكنك من خلاله إرسال رسالة ، وإرفاق المتغيرات به. الرسائل تطير مباشرة إلى المرسل إليه دون انتظار في طابور للمعالجة. إنه مريح ويخلق ارتباكًا في بعض الأحيان. غالبًا ما تكون هناك حاجة إلى الرسائل من أجل إرسال المعلومات من GO إلى واجهة المستخدم الرسومية (على سبيل المثال ، التقطت الأغنام الخاصة بك فقاعة مع الفاكهة ، نقوم بتحديث النتيجة في واجهة المستخدم الرسومية).



والعكس صحيح (الطاقة انتهت ، نبلغ الغنم أن الوقت قد حان للنوم).



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

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

عظام التنين بدلا من العمود الفقري


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

شارك و Admob


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

dict["ru"]["lang"]=" " dict["en"]["lang"]="Ya ne russkiy" 

وتغيير النص أثناء التهيئة ، بالإشارة إلى ما يلي:

  language=sys.get_sys_info().language label.set_text("game:/go#label",dict[language]["lang"] 

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

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


All Articles