Popcorn / DX-Ball.....

smasher

New member
Popcorn / DX-Ball.....

שלום! אני בונה משחק כפרוייקט לבגרות 5 יחל ב- סי++, והמשחק הוא פופקורן או למי שמכיר אותו כ- DX-BALL - שבו ישנה פלטה וקוביות בחדר שריך לפוצץ אותן בעזרת כדור ואסור שהוא יפגע ברצפה... הנה קישור למי שלא מכיר... אז יש לי כרגע חדר, ובתוכו את הקוביות שמסודרת כמו מערך תלת-מימדי, וכדור שזז ופוגע בקירות. 1. איך אני יודע אם הכדור פוגע בקובייה ? המשחק תלת-מימדי, בסביבת BORLAND TURBO C++
 

DNile

New member
Collision detection

תעשה חיפוש על זה בפורום / בגוגל.
 

smasher

New member
שאלה נוספת - גבולות תלת-מימדיים..

כפי שציינתי, המשחק שלי מתרחש בתוך חדר , שהוא בעצם קובייה שהמבט כלפיה הוא מבפנים. השאלה שלי - איך אני יוצר גבולות תלת-מימדיים ? הכוונה - כאשר המשחק בדו-מימד, אז הכדור נע עד שהוא פוגע בדופן של הקוביה (במקרה 2D של הריבוע) וככה צריך להיות. אך כשהמשחק ב- 3D, הכדור עדיין זז כפי שתיארתי, למרות שהוא "אמור" לזוז בצורה אחרת, כפי שמוצג בתמונה המצורפת. תודה מראש לעוזרים !
 

IP yuval

New member
לדעתי אם תעשה את המשחק הזה כך

שהכדור ינוע בשלושה מימדים, אז לא יהיה אפשר לשחק בזה. בכדור, כמו אור, כשהוא פוגע בקיר אז הכיוון שלו צריך להשתנות כך שזוית הפגיעה שווה לזוית החזרה. יש משחק חופשי (קוד פתוח) דומה, אולי הוא יכול לעזור לך. http://lgames.sourceforge.net/index.php?project=LBreakout2 VPython היא ספרייה מאוד נוחה לתלת מימד (פשוט יחסית) בפייטון. אני זוכר שראיתי באחת הדוגמות שם כדורים שעובדים לפי כוחות הפיזיקה החדר סגור זזים. אולי זה גם יכול לעזור לך.
 

smasher

New member
נו ומה לא בסדר?

משחק בדו מימד עשיתי, וכמובן שזוית החזרה שווה לזוית פגיעה.. (בקרוב יש לי בגרות על אופטיקה אז את זה אני יודע
) אז כאן פשוט יש שתי זויות.
 

DadleFish

New member
במקרה הספציפי הזה,

זה פשוט מאוד. תראה, בדו-מימד יש לך שני צירים, X ו-Y. ה-IF שלך נראה משהו כמו:
if (current_x <= minimal_x) { // Collided with left wall } else if (current_x >= maximal_x) { // Collided with right wall } else if....​
בדו מימד יש לך ארבעה קירות בסה"כ, ואתה צריך לזהות התנגשות בשלושה מתוכם (ימין, שמאל, למעלה). בתלת מימד נכנס ציר נוסף - Z. עכשיו יש לך כבר שישה קירות, ימין, שמאל, תקרה, רצפה, קיר אחורי (רחוק) וקיר קדמי (קרוב). אתה אמור לזהות התנגשות ב-5 קירות (כל הקירות למעט הרצפה). במקום שלושה if-ים כמו קודם, אתה צריך 5 if-ים. זה הכל. השאלה הגדולה היא איך אתה מצייר הכל במרחב. אם אתה מתבסס על מערכת קואורדינטות רגילה של X,Y,Z, לא תהיה לך שום בעיה - נגיד קיר ימין יהיה ב-X=10, וינוע בציר Z מ-10 עד (10-), ובציר Y מ-10 עד (10-). מספיק שה-if שלך יבדוק האם עברת את X=10 כדי שתזהה התנגשות בקיר הימני. יש כל מיני ניואנסים כמו התנגשות בשני קירות בו זמנית - אבל תתחיל בקטן.
 

smasher

New member
לא הבנת אותי...

תראה, את ה-IF-ים אני יודע לעשות, באמת שזאת לא בעיה.. אבל מה שכן הכדור ממשיך לנוע עד שהוא פוגע באחת מ-4 הדפנות של המסך, כאילו המשחק בדו-מימד, ולא מתנהג כבתלת-מימד.. קצת קשה להסביר את זה במילים, בציור זה יותר מובן אני חושב.
 

IP yuval

New member
שכחת לעשות ציר Z? או שכחת להניע את

הכדור בהתחלה גם בציר Z? לא כל כך ברור לי מה הבעיה.
 

DadleFish

New member
אני לא יודע איך התוכנה כתובה,

אבל אם ה-IF-ים כתובים כמו שהצעתי - כנראה שאתה לא מחזיק נכון את העולם ככלל (לפני שאתה עושה לו טרנספורמציה לדו-מימד).
 

smasher

New member
../images/Emo41.gif../images/Emo41.gif../images/Emo41.gif שאלה חדשה . . .

שלום ! אז ככה, יש לי חדר, בלוקים (קוביות) בתוכו וכדור שזז יפה מאוד בחדר. הצלחתי לגלות מתי הכדור מתנגש בקוביות, ובהתאם לכל הן כאילו מתפוצצות (נעלמות פשוט) ממש אחרי המפגש. הבעיה שלי כרגע היא שינוי הכיוון של הכדור. אם הכדור פוגע בדופן הימנית למשל של הקובייה, אז אני צריך לשנות את הכיוון רק בציר X - vx = -vx איך אני יכול לדעת באיזו דופן הכדור פגע ?
 
למעלה