تخطي إلى المحتوى الرئيسي

حالة اللعبة

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

في THNK، إنه دور الخادم للتحكم في التحديثات حالة اللعبة وإرسال التحديثات إلى كافة العملاء. دور العميل هو عرض حالة اللعبة وإرسال طلبات اللاعب لتغيير حالة اللعبة.

أشكال "حالة اللعبة"

يهتم THNK بمزامنة حالة اللعبة من الخادم إلى العميل. لذلك تحتاج إلى وضع علامة على عناصر المشهد كحالة لعبة لأجل THNK. حالة اللعبة تأخذ شكلين في THNK: الكائنات (لعالم اللعبة) والمتغيرات (لبقية حالة اللعبة).

الكائنات

يمكن وضع علامة على الكائنات كحالة لعبة في THNK عن طريق إضافة السلوك "Synchronize" على هذه الكائنات. سيراقب هذا السلوك التغييرات على الكائن وسيقوم تلقائيًا بمزامنة تلك التغييرات للعملاء.

ملحوظة

خصائص الكائن فقط متزامنة، وليس خصائص السلوك!

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

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

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

متغيرات الحالة

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

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

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

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

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