Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming
Gamedevelopment

المساحات: حاويات كائن لعبة مفيدة

by
Difficulty:IntermediateLength:LongLanguages:

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

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

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

أود أن أشكر Sean Middleditch لتدريسه لي حول فوائد Spaces.

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


إدارة الكائنات التقليدية

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

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

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

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

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


حاويات متعددة للعبة اللعبة

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

لنلق نظرة سريعة على مثال لما قد يبدو عليه تنفيذ المساحة بلغة مشابهة لـ C ++:

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

Diagram showing the simple organization of game objects into isolated containers.
 رسم تخطيطي يوضح التنظيم البسيط لعناصر اللعبة في حاويات معزولة. لا تحتوي كل المسافات على نفس مقدار كائنات اللعبة ، أو حتى كائنات اللعبة نفسها.

ما هي الكائنات التي تدخل إلى الفراغات؟

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

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

المصطلح

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

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

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

النظم والمساحات

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

Diagram exemplifying the simplicity of allowing a system to operate upon a space as input.
رسم تخطيطي يوضح بساطة السماح لنظام يعمل على مساحة كمدخل.

تخيل نظام رسومات يحتوي على void Graphics::DrawWorld( Space space ) . DrawWorld دالة DrawWorld هذه DrawWorld فوق الكائنات الموجودة داخل المساحة المعينة والتي يمكن عرضها وترتيبها على الشاشة.

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

هذا النمط يمنحك بعض الفوائد الرائعة ، كما هو مفصل في القسم التالي.


فوائد المساحات

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

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

مستويات معزولة

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

يمكن أن تكون فكرة باردة للألعاب ثنائية الأبعاد مثل platformers (أو حتى 3D الألعاب) لمحاكاة المستويات الفعلية والأعداء من اللعبة في الخلفية. هذا وقد جلب العالم إلى الحياة بطريقة لا تتطلب في الواقع أي محتوى إضافي، ولا يكاد أي وقت التطوير الإضافية. هو أفضل مثال يمكن أن تجد هذه "الأساطير ريمون":


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

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

متعددة المحلية

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

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

دعم المحرر

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

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

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

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


أفكار التنفيذ

إدارة الفضاء

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

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

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

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

المكونات وسوبسباسيس

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

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

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


استنتاج

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

كمصدر ، بلدي تنفيذ الفضاءات مفتوحة المصدر للعرض العام داخل محرك اللعبة SEL .

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.