ثابت مقابلمتغير معدلات الإطار في الألعاب:ما هو أفضل ، ومتى ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

الطريقة التي يعمل بشكل أفضل بالنسبة محددة الحالات ؟ يرجى النظر:

  • التموين إلى نظام مختلف المواصفات ،
  • سهولة التطوير/الصيانة ؛
  • سهولة ترقية;
  • الأداء النهائي.
هل كانت مفيدة؟

المحلول

ويبدو أن معظم 3D المطورين يفضلون متغير إطارا في الثانية:الزلزال, الموت وغير واقعي محركات كل من حجم صعودا وهبوطا بناء على أداء النظام.

  • على الأقل عليك أن تعوض بسرعة معدلات الإطار (على عكس 80 مباراة على التوالي في ال 90 ، بطريقة سريعة جدا)
  • حلقة الرئيسية الخاصة بك ينبغي أن تكون معلمات من timestep على أية حال, طالما انها ليست طويلة جدا ، لائق متكامل مثل RK4 يجب التعامل مع الفيزياء بسلاسة بعض أنواع الرسوم المتحركة (كيفراميد العفاريت) يمكن أن يكون الألم إلى parameterize.رمز الشبكة سوف تحتاج إلى أن تكون ذكية كذلك ، لتجنب اللاعبين مع آلات أسرع من إطلاق النار في كثير من الرصاص على سبيل المثال ، ولكن هذا النوع من اختناق سوف تحتاج إلى القيام به من أجل التعويض الكمون على أية حال (الرسوم المتحركة والثوابت شأنها أن تساعد على إخفاء الشبكة متخلفة جدا)
  • توقيت رمز سوف تحتاج إلى تعديل لكل منصة, لكنه صغير مترجمة تغيير (على الرغم من بعض أنظمة جعل توقيت دقيق للغاية من الصعب, ويندوز, ماك, لينكس يبدو موافق)
  • متغير معدلات الإطار تسمح لأقصى قدر من الأداء.ثابت معدلات الإطار تسمح أداء ثابت ولكن لن يصل إلى الحد الأقصى على جميع الأنظمة (التي يبدو أن المعرض سدادة لأي لعبة خطيرة)

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

إذا هو لغز لعبة 2D يمكن أن تحصل على الأرجح بعيدا مع ثابت معدل الإطار ، ربما قليلا معلمات سوبر بطيئة أجهزة الكمبيوتر التالي سنوات النماذج.

نصائح أخرى

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

قليلا من رمز للتدليل على استخدام اللاسلكي:

const float STEP = 60.f / 1000.f;
float accumulator = 0.f;

void Update(float delta)
{
    accumulator += delta;

    while(accumulator > STEP)
    {
        Simulate(STEP);
        accumulator -= STEP;
    }
}

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

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

خيار واحد لا المستخدم ، نود أن نرى في كثير من الأحيان بشكل حيوي تغيير مستوى التفصيل (بالمعنى الواسع, ليس فقط التقنية المعنى) عند فراميراتس تختلف خارج certian المغلف.إذا كنت التقديم في 5FPS ، ثم إيقاف عثرة في رسم الخرائط.إذا كنت التقديم في 90FPS ، وزيادة أجراس وصفارات قليلا ، وإعطاء المستخدم بعض أجمل الصور إضاعة CPU و GPU مع.

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

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

المشكلة الرئيسية التي مريت بها مع طول متغير الإطار مرات هو النقطة العائمة الدقة و متغير الإطار مرات يمكن أن مفاجأة لك في كيفية لدغة لك.

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

وجود ثابتة (أو على الأقل الأدنى على طول الإطار) الإطار مرات يتيح لك التحكم في مقدار FP الخطأ تحتاج إلى أن تأخذ في الاعتبار.

تجربتي محدودة إلى حد ما إلى حد ما ألعاب بسيطة (وضعت مع SDL و C++) ولكن لقد وجدت أنه من السهل جدا فقط لتنفيذ ثابت معدل الإطار.هل تعمل مع 2d أو 3d الألعاب ؟ أود أن نفترض أن أكثر تعقيدا بيئات 3d سوف تستفيد أكثر من متغير معدل الإطار أن الصعوبة ستكون أكبر.

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