كيف يمكن اكتشاف دائم الاصطدام مع السنجاب محرك الفيزياء

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

سؤال

أنا أحاول أن تلعب "بوينغ" الصوت عندما شكل الكرة ضرب أي نوع آخر من شكل.الذي يعمل.ولكن يعمل بشكل جيد....

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

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

وقد أي شخص من أي معالجة هذه المسألة ؟ كيف حلها ؟

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

المحلول

ويمكن أن لا مجرد لعب بك "بوينغ" الصوت عند الاتصال مكسورة؟ هناك رد على ذلك في السنجاب، typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, struct cpSpace *space, void *data)

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

نصائح أخرى

أنا لا أعتقد أن ما أنا على وشك أن أقوله هو ممارسة جيدة, ولكن أنا متأكد من أنها سوف تحل مشكلتك:

  1. لكل كائن ، والحفاظ على اثنين من المتغيرات:(1) كائن آخر اصطدمت مع (2) آخر الاصطدام الوقت.

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

هذا هو بسيط جدا وفعالة جدا:

// In your ball interface
id lastCollisionObject;
double lastCollisionTime;


// When a collision occurs...
double now = GetTime();
id other = GetCollisionObject();
if ((now - lastCollisionTime) > 0.3 || other != lastCollisionObject) {
    PlaySound(kBoingSound);
}
lastCollisionObject = other;
lastCollisionTime = now;

والأشكال لا تملك السرعة في السنجاب. الهيئات وترد لهم الحصول عليها. يمكنك الوصول إلى سرعة مثل هذا: "myShape.body-> الخامس". أوافق على أن يجب أن تكون فقط قادرة على معرفة ما اذا كان السرعة هي أكثر من عتبة معينة لمعرفة متى يحدث "تأثير". يمكنك أيضا التحقق من سرعة دوران لمعرفة ما إذا كانت الكرة المتداول.

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