أي نوع من القضايا التي توجد في تنفيذ الألعاب متعددة اللاعبين في الوقت الحقيقي

StackOverflow https://stackoverflow.com/questions/90423

سؤال

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

لم قررت ما جعل ، ولكن الغرض من هذا السؤال يمكنك أن تنظر في 10-لاعب لعبة 2D مع X Y الحركة.

هل كانت مفيدة؟

المحلول

  • 'العميل الخادم" أو "الند للند" أو " ما بين:الكمبيوتر الذي لديه سلطة على أي لعبة الإجراءات.

مع بدورها القائم على الألعاب عادة فإنه من السهل جدا أن أقول 'الملقم في نهاية المطاف السلطة و نحن القيام به'.مع الوقت الحقيقي الألعاب في كثير من الأحيان أن التصميم هو مكان عظيم للبدء ، ولكن بمجرد إضافة الكمون العميل الحركة/الإجراءات يشعر لا تستجيب.إذا كنت تضيف نوعا من الكمون يختبئ' مما يتيح للعملاء المدخلات تؤثر على حرف أو الوحدات على الفور إلى حل هذه المشكلة, و الآن لديك للتعامل مع التوفيق بين المسائل عند العميل و خوادم gamestate يبدأ تتباعد.9 مرات من 10 على ما يرام ، البوب أو lerp الكائنات العميل أثرت على حجية الموقف ، ولكن أن 1 من أصل 10 مرات عند الكائن هو اللاعب الرمزية أو شيء من هذا الحل غير مقبول ، حتى يمكنك البدء في إعطاء العميل سلطة على بعض الإجراءات.الآن عليك أن توفق بين عدة gamestates على الملقم و فتح نفسك تصل إلى احتمال أن يكون "الغش" عن طريق عميل الخبيثة ، إذا كنت الرعاية حول هذا النوع من الشيء.هذا هو الأساس حيث كل الفضائي/خداع/أيا كان علة/الغش يأتي.

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

  • 'متزامنة" أو "asynchronus'

استراتيجية مشتركة لضمان أن جميع اللاعبين التشغيل على نفس gamestate هو ببساطة الاتفاق على قائمة من لاعب المدخلات (عن طريق واحد من النماذج المذكورة أعلاه) ومن ثم يكون اللعب المحاكاة تلعب بها بشكل متزامن على جميع الآلات.وهذا يعني محاكاة المنطق يجب أن تتطابق تماما أو الألعاب سوف تذهب متزامنة.هذا هو في الواقع أسهل و أصعب مما يبدو.انها أسهل لأن اللعبة هو مجرد رمز رمز حد كبير ينفذ بالضبط نفس الشيء عندما تعطي نفس المدخلات (حتى مولدات الأرقام العشوائية).الأمر أصعب لأن هناك حالتين حيث أن الأمر ليس كذلك:(1) عندما كنت بالصدفه استخدام عشوائي خارج لعبة محاكاة و (2) عند استخدام العوامات.السابق هو تصحيحه من خلال وجود قواعد صارمة/تأكيدات على ما RNGs يتم استخدامها من قبل ما اللعبة النظم.وهذا الأخير هو حلها من خلال عدم استخدام العوامات.(يطفو فعلا مشاكل 2, واحدة من أنها تعمل بشكل مختلف استنادا إلى التكوين الأمثل من المشروع الخاص بك ، ولكن حتى لو كان ذلك عملت بها ، أنها تعمل بشكل غير متسق في مختلف بنيات المعالج الصراف الآلي ، لول).ستار كرافت/علب و أي لعبة التي تقدم 'إعادة' على الأرجح استخدام هذا النموذج.في الواقع, بعد إعادة النظام هو وسيلة رائعة لاختبار RNGs يقيمون في المزامنة.

مع asynchronus حل لعبة سلطات الدولة ببساطة بث تلك الدولة بأكملها إلى جميع العملاء في بعض التردد.العملاء يأخذ تلك البيانات في البطولات الاربع التي في gamestate (و عادة القيام ببعض التبسيط استقراء حتى يحصلوا على التحديث القادم).هنا حيث 'udp' يصبح خيارا قابلا للتطبيق ، لأنك إغراق كامل gamestate كل ~1sec أو إسقاط جزء من هذه التحديثات هو غير ذي صلة.للألعاب التي يكون قليلا نسبيا لعبة الدولة (زلزال العالم من علب) هذا هو في كثير من الأحيان أبسط حل.

نصائح أخرى

وهناك عدد قليل من العوامل التي تدخل في وضع متعددة

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

  2. جدار الحماية/اتصال.التأكد من لعبة متعددة اللاعبين لا يجب أن تجعل 2000 الاتصالات الصادرة و يستخدم المنفذ القياسي حتى portforwarding من السهل.تفاعل مع جدار حماية windows المحتمل أن يكون مكافأة إضافية.

  3. عرض النطاق الترددي.هذا هو المهم, كم البيانات هل تنوي أن تدفع من خلال شبكة اتصال ؟ أعتقد أن هذا سوف ينزل للعب اختبار وتسجيل الإنتاجية.إذا كنت تتطلب ما يزيد عن 200kb/s لكل عميل قد تحتاج إلى إعادة التفكير في بعض الأمور.

  4. تحميل الملقم.هذا مهم أيضا ، كم المعالجة المطلوبة من قبل خادم العادي اللعبة ؟ هل تحتاج إلى بعض super 8 الأساسية الخادم مع 16gb من ذاكرة الوصول العشوائي لتشغيل ؟ هل هناك طرق للحد من ذلك ؟

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

التخطيط الخاص بك أفضل صديق.معرفة ما يحتاج حقا.

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

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

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

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

كيف المهم هو تجنب الغش ؟ [يمكنك أن تثق بأي معلومات قادمة من العميل أو أنها يمكن أن تكون موثوق وموثق ?]

نموذج كائن كيف هي كائنات ترسل من جهاز واحد إلى آخر ؟ كيف هي الإجراءات التي نفذت على كائن ؟

تفعل العميل/الخادم أو الند للند ?

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

إذا كنت تفعل العميل/الخادم كيف تتعامل مع التخلف ؟ [الميت الحساب؟]

هناك الكثير من غير مشاكل تافهة المشاركة في شبكة الترميز.

تحقق من RakNet كلا انها حرة لتحميل كود انها مجموعات المناقشة.

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top