שאלה בנוגע לבוקס2די

Brusi

New member
שאלה בנוגע לבוקס2די

אני רוצה לגרום לגוף לקפוא במקומו, באופן בו גופים אחרים עדיין יגעו בו, אבל הוא יהיה יציב כמו קיר ולא יזוז יותר. האם יש אפשרות לשנות את ה-Density של גוף שכבר נוצר? כי אם כן אז אני פשוט אשנה אותה ל-0. אבל לא הצלחתי לעשות את זה, ואני חושב שיש דרך יותר טובה לעשות את זה. כרגע (וכנראה גם בעתיד) אין לי צורך לעשות Unfreeze, כלומר הגוף לא צריך לחזור למצב גמיש או לזכור את התכונות הקודמות שלו, אבל הוא כן צריך להיות מושמד בשלב מסוים (כדי למנוע עומס). איך אני עושה את זה? האם יש דבר כזה ג'וינט שמחבר את הגוף לרקע? כי זה יכול לעבוד בשבילי... אני בכלל לא מבין בג'וינטים ולא עבדתי איתם לעולם. תודה מראש!
 

IndigonFlash

New member
פשוט מאוד

תגדיר שה-type של הגוף (שזה property של b2Body), יהיה b2Body.e_staticType.
 

Brusi

New member
להבהרה,

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

ואגב, אתה לא חייב ל static אתה יכול גם ל Kinematic ואז גם אפשר להזיז אותו אם רוצים בלי קשר לגרביטציה
 

Brusi

New member
זה לא עובד..

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

Brusi

New member
נלחץ לי שליחה..

בכל אופן, עכשיו אני מסתכל עליו. הגופים הם באמת לא איפה שחשבתי שהם, אבל הם עדיין מתנהגים דומה הגופים שהקפאתי הופכים באמת לירוקים (כמו גופים עם דנסיטי 0). אבל אם משהו אחר נשען עליהם, אז הם לא מחזיקים אותו באויר, כמו שהם אמורים, כמו פלטפורמה, אלא שוקעים במהירות די איטית וקבועה תחת העומס. אמנם גופים "פעילים" לא עוברים דרכם, אבל הם כן עוברים זה דרך זה, לא מגיבים להתנגשות. הם עוברים גם דרך גופים שהיו "ירוקים" מלכתחילה, כלומר דרך גופים קבועים במקום, שלא זזים בכלל אבל אמורים להחזיק אותם. עוד משהו שאני מקפיד, ואני לא יודע אם זה קשור, זה שפעולת ההקפאה לא נעשית בתוך שלב ה-STEP אלא מחוצה לו, ב-EnterFrame. יש לך מושג מה הבעיה?
 
זה שהם עוברים זה דרך זה זה בסדר

זה שהם זזים זה מוזר. מה זה פעולת ההקפאה, אתה צריך לעשות אותה מחוץ ל step כלשהו. במה אתה עובד?
 
בעצם ברור, אתה עובד בפלאש

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

Brusi

New member
הפרוייקט שלי קצת רגיש בשביל לשלוח את הקבצים

אבל הנה כאן יש קובץ שמכיל בדיוק את מה שאני צריך בסביבה סטרילית. מצורף קוד מקור. כרגע כשלוחצים על המסך הוא הופך חלק מהחלקים לסטטים. זה עושה את אותו דבר שהוא עושה אצלי, כלומר לא עובד. מה שאני רוצה זה שהגופים ה"ירוקים" יישארו תקועים באויר, ככה שגופים אחרים יוכלו להישען עליהם. מצורף קוד מקור והכל, אפילו התיקייה של בוקס2די. מקווה שיש לך פלאש CS5. http://dl.dropbox.com/u/33948467/HelloBoxWorld.zip
 

IndigonFlash

New member
אתה מצייר את האובייקט "עם כיוון השעון"?

אם קבעת בעצמך את מיקומי ה-vertices הם צריכים להיות מסודרים על המצולע עם כיוון השעון. אחרת האובייקט מתנהג כאילו הצלעות "חוסמות" מבפנים ולא מבחוץ.
 

Brusi

New member
עד כמה שידוע לי הקפדתי על זה

במהלך כל הצורות שיצרתי במשחק. עובדה שהן לא עושות בעיות חוץ מזה. מה גם שאותה הבעיה מתרחשת בקובץ שצירפתי, בצורות שנוצרות על ידי "יצירת מלבן" ולא על ידי vertices.
 

Brusi

New member
הגעתי לפיתרון הסופי לבד,

אבל מכיוון שאני אזרח טוב אני אפרסם אותו כאן. הציעו לי כאן להפוך גוף לסטטי. להפיכת הגוף לסטטי יש משמעות כזאת - לא פועלת עליו גרביציה,אין לו מהירות, והמנוע לא בודק התנגשות שלו עם גופים סטטים אחרים. המנוע בודק רק התנגשות שלו עם גופים פעילים אחרים, שכן אם הוא גם את זה לא היה עושה אז הגוף הסטטי לא היה גוף אלא שום כלום. אבל מפני שהפכתי גוף עם מסה לגוף סטטי (ולא גוף עם דנסיטי 0 ולכן גוף שמסתו אפס, כלומר אינסופית) אז הגוף זז בזמן ההתנגשות. לגוף אין מהירות משלו ולכן גם הוא לא צובר תנופה, אבל ה"מכה" שהוא מקבל מגופים פעילים כן עשויה להזיז אותו ממקומו, אפילו לפעמים לתוך חפיפה עם גוף סטטי אחר (כי לא נבדקת ההתנגשות ביניהם). לכן כדי לקבל את המטרה הרצויה עשיתי את שתי הפעולות הבאות:
_body.m_type = b2Body.e_staticType; _body.SetMass(new b2MassData);​
הפעולה הראשונה הופכת את הגוף לסטטי, הפעולה השניה הופכת את המסה שלו ל-0. זאת פעם ראשוונה שאני משנה את המסה באופן ידני ולא באמצעות הפונקציה GetMassFromShaes. אני הנחתי פה, ולדעתי בצדק, שהערך המאותחל של new b2MassData הוא מסה 0. הפעולה הראשונה, שהופכת את הגוף לסטטי, היא לדעתי לא הכרחית על מנת שהגוף יקפא במקום, אבל מכיוון שחלק מכל הכוונה שלי היתה לחסוך זמן עיבוד, אז מבחינתי זה היה הכרחי, ולא הייתי עולה על זה בלעדיכם. תודה לשפי ולאינדיגונפלאש :)
 
למעלה