التصادم بين الكائنات اللعبة و الأرض فيما يتعلق الجاذبية ؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

كيف الألعاب مع خطورة التعامل مع العلاقة بين تحريك الأشياء مثل اللاعبين وحوش او كائنات الأرض ؟ هو اللاعب باستمرار "الوقوع في" الأرض التي ارتدت مرة أخرى ؟

طريقتين للرد على الاصطدامات التي وجدت تتحرك اللاعب العودة إلى الموقع السابق قبل الاصطدام ، واختبار الموقف الجديد قبل الانتقال إلى انظر إذا كان من شأنه أن يؤدي إلى التصادم ، ولكن لا أرى أي من هذه يمكن التعامل مع المنصة التي ترتفع صعودا و يجب أن يكون قادرا على رفع لاعب.أنا أبحث في هذا من لعبة 2D تصميم المنظور ، ولكن أتصور أن تحدث نفس المشكلة في لعبة 3D تصميم.أي تلميحات ؟ أي المراجع التي يجب أن تحقق ؟ شكرا

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

المحلول

قد ترغب في التحقق GameDev.net's الجاذبية أسئلة وأجوبة للحصول على بعض المعلومات الأساسية.

منذ كنت صنع لعبة و ليست دقيقة للغاية الفيزياء نماذج مما يمكن أن تحصل بعيدا مع القيام يولر التكامل.إذا كان لديك الحاجة إلى دقة يزيد الأكثر شعبية التكامل الطريقة التي أرى المستخدمة هي رونج Kutta (RK4) التكامل.كنت على الأرجح لن تحتاج إلى هذه لعبة بسيطة ولكنها بالتأكيد تستخدم في الفيزياء المتقدمة محاكاة 3d games.العيب باستخدام RK4 قليلا زيادة تعقيد أبطأ قليلا.هو دقيق جدا على الرغم من ، لكن الآن دعونا العصا مع أوله جيدة يولر.

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

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

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

تطبيق الجاذبية سوف ببساطة إضافة إلى Y سرعة الجسم قبل لدينا الجاذبية المستمر مضروبا الوقت المنقضي.

private long previousTime = System.currentTimeMillis();
private long currentTime = previousTime;

public void updateGame()
{
    currentTime = System.currentTimeMillis();
    float elapsedSeconds = (currentTime - previousTime) / 1000f; 

    foreach(GameObject gameObject in gameObjects)
    {
        // Apply gravity to velocity vector
        gameObject.velocity.y += (gravityConstant * elapsedSeconds); 

        // Move objects x/y position based off it's velocity vector
        gameObject.position.x += (gameObject.velocity.x * elapsedSeconds); 
        gameObject.position.y += (gameObject.velocity.y * elapsedSeconds);

    }

    checkCollisions();

    previousTime = currentTime;
}

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

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

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

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

إذا كنت بحاجة إلى مساعدة في تصادم رد أقترح أن تبحث في:

نصائح أخرى

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

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

واحد من الكتب الأكثر اكتمالا حول هذا الموضوع هو <وأ href = "http://www.amazon.com/exec/obidos/tg/detail/-/1558607323؟tag=realtimecolli-20" يختلط = "نوفولو noreferrer "> <م> كشف التصادم الحقيقي من جانب كريستر اريكسون . لديه على بلوق رفيق جدا. إيريك لينغييل في <م> الرياضيات لعبة 3D البرمجة والرسومات الكمبيوتر هو مفيد للغاية.

أنا لست تحديدا ألعاب مبرمج, ولكن هذا هو فهمي:

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

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

scroll top