سؤال

أنا أعمل على كتابة لعبة تنس الطاولة و لقد توصلت المشكلة.

أنا في محاولة لمعرفة كيفية ترتد نقطة خارج خط.

أفضل طريقة يمكنني معرفة أن تفعل هذا مع

  • حساب الحالية والمستقبلية موقف الكرة.
    • القطعة المستقيمة:{الكرة.موقع الكرة.الموقع + الكرة.اتجاه} (الكرة.موقع الكرة.اتجاه استخدام مخصص ناقلات/تنسيق الصف)
  • حساب إذا ولدت شريحة خط يتقاطع مع أي من الجدران أو المجاذيف.
    • ???لا أعرف كيف أفعل هذا حتى الآن (سوف يسأل في سؤال منفصل)
  • عند أول تقاطع وجدت
    • ترتد الكرة من على خط المرمى
      • إنشاء مثلث شكلت مع
        • a = الكرة الحالى
        • ب = نقطة تقاطع خط.
        • ج = أقرب نقطة إلى الكرة الحالي في الموقف على خط المرمى.
      • تجد زاوية أن يضرب الكرة خط
        • زاوية = cos(المسافة(ب ، ج) / المسافة(أ ، ب))
      • تجد زاوية تدوير اتجاه الكرة
        • (90 - الزاوية)*2
      • تدوير الكرة في الاتجاه ونقله إلى أنه موقف جديد
        • تجاهل سافر مسافة لضرب الخط الآن لا تحتاج إلى أن تكون بالضبط على الخط
  • آخر إذا كان هناك أي تقاطع
    • تحريك الكرة إلى الموقف الجديد.

هل هذه طريقة مقبولة أو أنا في عداد المفقودين شيئا ؟

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

المحلول

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

نصائح أخرى

إذا كنت تريد إحساس Pong الأصلي، فإن حساب المتجه الجديد أسهل بكثير من إجراء انعكاسات حقيقية.يقوم Pong فقط بعكس إشارة dx أو dy.إذا اصطدمت الكرة بحاجز أفقي، قم بإلغاء dy.عمودي، ثم نفي DX.

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

ستكون الطريقة التي تحسب نقطة معينة بنقطة البداية والزاوية والمسافة مفيدة:

Public Function TranslatePoint(ByVal tStartPoint As Point, _
ByVal tAngle as Decimal, ByVal tDistance As Decimal) As Point

هنا هو ما أود أن تفعل:

1) نفترض الخاص بك بونغ الجانبين في الخطوط x=a و x=b

2) السماح الكرات الخاصة بك موضع يكون (x0, y0) و السفر على خط Ax+By=C

3) من هذا يمكنك حساب بسهولة (x1, y1) نقطة حيث أن خط يتقاطع الجدار

4) يمكنك الحصول على معادلة الخط بعد ترتد مع العلم أن (x0, y1+y0) هو انعكاس بعد الارتداد.(الكرة y1-y0 تحت نقطة تقاطع وبالتالي سوف يكون y1+y0 فوق نقطة تقاطع.)

5) نظرا إلى 2 المعادلات يمكنك رسم النقاط الخاصة بك (على افتراض انك تعرف السرعة).

قد تكون مهتمًا بـ دروس ن, والتي تناقش اكتشاف الاصطدام والاستجابة له (بما في ذلك الارتداد والاحتكاك) المستخدمة في اللعبة "N".

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

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

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