Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. SpriteKit

Dasar SpriteKit: Nod

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called SpriteKit Basics.
Introducing SpriteKit
SpriteKit Basics: Sprites

Arabic (العربية/عربي) translation by Basrah (you can also view the original English article)

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

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

متابعة جنبا إلى جنب مع هذا البرنامج التعليمي، مجرد تحميل الريبو GitHub المصاحبة لها. يحتوي مجلد يسمى كاتب اكسامبليبروجيكت. فتح المشروع في هذا المجلد في Xcode، وكنت على استعداد للذهاب!

العقد

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

  • موقف (كجبوينت): موقف للعقدة داخل نظام الإحداثيات في الأصل
  • إكسسكالي (كجفلوات): جداول عرض عقده بمضاعف
  • yScale(CGFloat): جداول ذروة العقدة بمضاعف
  • ألفا (كجفلوات): شفافية العقدة
  • زروتيشن (كجفلوات): تناوب أويلر حول المحور z (بالتقدير الدائري)

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

العقد المشهد

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

في هذا المشروع بداية سبريتيكيت، يظهر المشهد الأولى عند تحميل المشروع. الآن، وهذا مجرد شاشة سوداء فارغة. ويتضح عند استدعاء جاميفيوكونترولير presentScene(_:) في عرض المثيل، يمر في الساحة كمعلمة:

لا تقلق بشأن الخيارات الأخرى في الوقت الراهن؛ سأوضح لهم لاحقاً في هذه السلسلة.

إنشاء مشهد

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

حدد ملف > الجديدة > الملف من Xcode للقائمة، واختيار "فئة تعمل باللمس الكاكاو".

Choose the Cocoa Touch Class template

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

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

تسمية العقد

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

يضاف ما يلي داخل الأسلوب didMove(to:) داخل GameScene.swift. يتم استدعاء هذا الأسلوب مباشرة بعد مشهد يرد بطريقة عرض. عموما، هذا هو حيث يمكنك إعداد أي من أصول اللعبة الخاصة بك وإضافتها إلى موقع الحادث.

هنا نقوم بإنشاء سكلابيلنودي استخدام init(text:) مهيئ الملاءمة، الذي يتخذ كمعلمة سلسلة نصية.

إضافة وإزالة العقد

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

تضاف العبارة التالية في الأسلوب didMove(to:).

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

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

لإزالة عقده، يمكنك استدعاء الأسلوب removeFromParent() على العقدة الذي تريد إزالته.

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

Test showing blank screen with text half off to the bottom left of the screen

لماذا نصف فقط النص الذي يظهر، على الرغم؟ الآن سيكون وقت المناسب للحديث عن سبريتيكيت لتنسيق ونظام تحديد المواقع.

لتحديد المواقع وينسق

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

A nodes x and y coordinates

أصول للعقدة في (0, 0)، ويتحرك إحداثي x إيجابية بالحق وترتفع إحداثيات y إيجابية الشاشة. تذكر أن سكسسيني عقده، وذلك مصدره أيضا (0, 0).

تعيين موضع العقدة

الآن بعد أن تعلمنا تنسيق نظام يعمل سبريتيكيت وكيف يضع العقد، يمكن أن ننتقل سكلابيلنودي إلى موضع آخر حتى نتمكن من رؤية النص بأكمله. أضف التالي إلى الأسلوب didMove(to:) داخل GameScene.swift.

هنا نحن ضع التسمية إلى وسط الساحة. خاصية الموضع من نوع كجبوينت، التي لديها x و y القيم التي تمثل نقطة واحدة داخل المشهد.

إذا كنت تختبر الآن، يجب أن تشاهد تم وضع العلامة في وسط الساحة.

Test with label positioned in centre of screen

التبديل بين مشاهد

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

أول شيء يتعين علينا القيام به إضافة الأسلوب didMove(to:). يضاف ما يلي إلى NewScene.swift.

بعد ذلك، نحن بحاجة إلى إضافة التسمية. تضاف العبارة التالية في الأسلوب didMove(to:) الذي قمت بإضافته أعلاه.

هذا بإضافة تسمية إلى نيوسسيني مع النص "إلى الخلف". المقبل، سوف ننفذ وظيفة يوحي بهذه التسمية-سوف نرد على أحداث اللمس بالتبديل بين مشاهد.

الاستجابة للمس

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

تسجيل معالجات الأحداث تعمل باللمس داخل اللعبة الخاصة بك، يجب عليك تطبيق أسلوب touchesBegan(_:with:) الخاص بطريقة العرض. إضافة الإجراءات التالية إلى GameScene.swift:

إذا كنت ترغب في اختبار هذا الآن، سوف ترى "تطرق" المطبوعة إلى وحدة التحكم عند لمس على الشاشة. عادة ما نحتاج، مع ذلك، أن يكون قادراً على أن أقول عندما قد تم التطرق إلى عقده معينة. للقيام بذلك، نحن بحاجة إلى طريقة ما للبحث عن وتحديد العقد. سوف نتعلم كيفية إنجاز هذا، ومن ثم العودة وإنهاء الأسلوب touchesBegan(_:with:).

البحث في شجرة العقدة

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

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

الأسلوب childNode(withName:) يبحث الأطفال في عقده لاسم معين تمريره كمعلمة.

الأسلوب enumerateChildNodes(withName:using:) يبحث عن الأطفال للعقدة وتدعو الكتلة مرة واحدة لكل عقده مطابقة يجدها. يمكنك استخدام هذا الأسلوب عندما تريد البحث عن كافة العقد التي تشترك بنفس الاسم.

الأسلوب subscript(_:) بإرجاع صفيف عقد التي تطابق اسم المعلمة.

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

الآن أن نعرف كيفية البحث عن العقد داخل شجرة العقدة، دعونا نعطي لدينا تسميات اسماً.

تضاف العبارة التالية في الأسلوب didMove(to:) داخل GameScene.swift.

هنا، نحن تعيين خاصية اسم في ستارتجاميلابيل إلى ستارتجامي.

نحن أيضا بحاجة إلى تعيين اسم للتسمية داخل نيوسسيني. إضافة التالية باستخدام أسلوب didMove(to:) داخل NewScene.swift.

ونحن تعيين اسم الخاصية إلى goback.

الكشف عن أي عقده من لمس

تضاف العبارة التالية في الأسلوب touchesBegan(_:with:) داخل GameScene.swift.

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

يمكن أن نحصل على توتشلوكيشن داخل المشهد من الموقع خاصية اللمس. ثم يمكننا معرفة العقدة التي تأثرت باستدعاء atPoint(_:) ويمر في توتشلوكيشن.

أننا التحقق إذا كان يساوي الخاصية توتشيدنودي اسم "ستارتجامي"، وإذا كان، ونحن نعلم أن المستخدم قد لمست التسمية. نحن ثم إنشاء مثيل من نيوسسيني وتعيين الخاصية scalemode نفس المشهد الحالي-يضمن هذا المشهد الأعمال نفسها عبر مختلف الأجهزة. Finally, we create an SKTransition and invoke the presentScene(_:transition:) method, which will present the scene along with the transition.

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

لن أقوم بتنفيذ اللمساتبجوان (_: مع طريقة :) في NewScene. لماذا لا تحاول القيام بذلك بنفسك وتحويل التسمية إلى GameScene باستخدام نوع انتقال مختلف؟ سيشبه الرمز عن كثب ما لدينا أعلاه ، فقط تذكر أننا أطلقنا على"عد" SKLabelNode.

خاتمة

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

هناك العديد من الأنواع الأخرى من العقد المتاحة ، وسنلقي نظرة عليها في البرنامج التعليمي التالي - بدءًا من SKSpriteNode!

لمعرفة المزيد حول كيفية البدء باستخدام SpriteKit ، يجب عليك أيضًا التحقق من مشاركة Davis Allie هنا على Envato Tuts +.

أيضا ، تحقق من دورات SpriteKit لدينا! ستأخذك هذه الخطوات من خلال خطوات إنشاء أول لعبة SpriteKit لنظام التشغيل iOS ، حتى إذا لم تكن قد تم تشفيرها باستخدام SpriteKit من قبل.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.