תכנות לילדים באמצעות Game Maker/מריו/מדרון
יהיה בסדר: את הצעד הזה לא חייבים להשלים לפי הסדר. (אבל כדאי! יש בו דברים שחשוב לדעת ושנשתמש בהם במשחקים הבאים.) אפשר להמשיך לצעדים הבאים ולחזור אליו אחר כך. |
מדרון
[עריכה]בואו נשתמש בירושה כדי להכין עוד סוג משטחים: מדרונות. נקרא להם slope_right ו-slope_left וניתן להם את הדמויות האלה (בהמשך נדאג לייפות אותם, כשנגיע לאריחים):
המדרונות צריכים להיות אובייקטים יציבים (Solid) כדי שמריו לא ייפול מהם, ולרשת מהמשטח כדי שמריו יוכל לנחות עליהם.
בשביל לבדוק את המדרונות, נציב אותם בחדר ככה שתיווצר גבעה קטנה שמריו יוכל לטפס עליה.
מה קורה כשמריו מנסה ללכת במעלה המדרון?
מריו בודק אם המיקום שישר לפניו פנוי, ורק אם כן הוא מתקדם. כשהוא מגיע למדרון הוא רואה שהמיקום שלפניו תפוס, ולכן הוא נעצר. כדי שהוא יוכל לעלות במדרון, הוא צריך לנסות להתקדם למיקום שנמצא קצת יותר גבוה, ולא רק ישר קדימה.
לכן צריך:
- ללכת לאירוע המשתמש שבו הפעולות להתקדמות של מריו.
- להוסיף את פעולת בדיקת ההפך כדי לטפל במקרה שהמיקום ישר מקדימה לא פנוי.
- במקרה הזה, לבדוק את המיקום שקצת מעליו: y=-4 ו-x=4*image_xscale.
- אם המיקום הזה פנוי, אז להעביר לשם את מריו באמצעות הפעולה להעברה למקום אחר.בשדה X נכתוב 4*image_xscale ובשדה Y נכתוב -4(לסמן Relative).
- להוסיף את פעולת התזוזה לנקודת המגע עם direction של 270 מעלות (כלומר: למטה) כדי לוודא שמריו ילך בדיוק על המדרון ולא ירחף מעליו.
- להקיף בבלוק את הפעולות שאחרי פעולות הבדיקה.
מריו עולה במדרון, אבל איפה בדיוק?
מריו נראה כאילו הוא מרחף מעל המדרון בלי לגעת בו. זה קורה כי סימנו שלדמות של מריו לא צריכה להיות בדיקת התנגשות מדוייקת כשקבענו את תכונות הדמות של מריו. לכן מה שנוגע במדרון זה המלבן המקיף של מריו.
אז אולי זה יסתדר אם אם פשוט נחזיר את הסימון לתיבת הסימון Precise collision checking בחלון תכונות הדמות של מריו? נסו ותראו!
איך מריו עולה במדרון כשמחזירים את בדיקת ההתנגשות המדוייקת?
כל תת-תמונה של דמות מריו ההולך מתנגשת במדרון במקומות אחרים - אחת יכולה להיות מעל המדרון, וכשהיא מתחלפת בבאה אחריה אז פתאום מריו תקוע בתוך המדרון ולא מתקדם עד שההנפשה מגיעה שוב לתת-תמונה הראשונה.
צריך לשלב איכשהו בין בדיקת התנגשות מדוייקת לבין משהו שלא משתנה בהנפשה כשמתחלפת תת-תמונה. למרבה המזל, בשביל זה בדיוק יש כיסוי.
כיסוי
[עריכה]הכיסוי (Mask) של אובייקט הוא דמות שמגדירה את גבולות ההתנגשות שלו. למשל, אם נשתמש בצורת משולש בתור כיסוי למריו אז רק מופעים שנוגעים במשולש הזה יתנגשו במריו, בין אם הם נוגעים במריו עצמו או לא. בתמונה משמאל, העיגולים הכתומים מתנגשים במריו, והעיגול הירוק לא.
בעזרת כיסוי אפשר להשתמש בהתנגשות מדוייקת בלי לדאוג שהאובייקט יתקע בגלל שכל תת-תמונה בהנפשה תתנגש במקומות אחרים.
בשביל ליצור כיסוי למריו, צריך קודם כל ליצור דמות לכיסוי. הכי פשוט יהיה להשתמש בתת-תמונה של מריו העומד מתוך הדמות הרגילה של מריו. לכן צריך:
- לשכפל את הדמות של מריו. לדמות המשוכפלת כדאי לקרוא mario_stand.
- בחלון תכונות הדמות לוודא שיש סימון בתיבה Precise collision checking.
- להקליק על Edit Sprite ולמחוק את כל התת-תמונות מלבד הראשונה - תמונת מריו העומד. (אחרת הכיסוי יהיה מונפש וישתנה בכל צעד.)
עכשיו אפשר להשתמש בדמות מריו העומד בתור כיסוי לאובייקט מריו: ללכת לחלון תכונות האובייקט של מריו, ולבחור בדמות מריו העומד בשדה Mask. ככה מריו יוכל ללכת ממש על המדרון, אבל לא יתקע בו כאשר ההנפשה תחליף תת-תמונה.
מריו עולה יפה במדרון. איך הוא יורד?
אתגר: לתכנת את מריו לרדת במדרון בהליכה בלי ליפול. |
אם לא הצלחת, אפשר פשוט להעתיק את מה שאני עשיתי:
- ללכת לאירוע המשתמש שבו הפעולות להתקדמות של מריו.
- להקיף בבלוק את פעולת ההצבה ל-x שמתבצעת אם המיקום ישר מלפנים פנוי.
- להוסיף אחריה פעולה לבדיקת התנגשות במיקום שמתחת למריו: y=5 Relative (ארבעה פיקסלים בגלל המדרון, ועוד פיקסל אחד כי מריו עומד מעל המדרון ולא בתוכו).
- אם אכן יש התנגשות מתחת מריו, להזיז אותו למטה (direction=270) עד נקודת המגע.
עוד מדרונות
[עריכה]עכשיו תורכם: ליצור אובייקטים של מדרון מתון, עם הדמויות האלה:לשים מדרונות מתונים בחדר ולבדוק שמריו יכול לעלות, לרדת ולקפוץ עליהם. |
ברשימת המשאבים משמאל יש לנו כבר רשימה ארוכה של אובייקטים, וגם הרבה דמויות. וזה עוד לפני שהתחלנו לתכנת אויבים, סופר מריו, יריות, חפצים לאיסוף, לוח ניקוד, ומי יודע מה עוד. כשיש כל כך הרבה דברים זה עלול לבלבל ולגרום לשגיאות. לכן כדאי לסדר אותם. ובשביל זה יש תיקיות.
תיקיות
[עריכה]המשאבים של המשחק מסודרים בתיקיות לפי סוג המשאב: תיקיית הדמויות Sprites, תיקיית הצלילים Sounds, תיקיית האובייקטים Objects, ועוד. בכל תיקיה כזאת אפשר ליצור תת-תיקיות כדי לארגן את המשאבים שבה לתת-קבוצות.
למשל, בשביל לארגן את הדמויות צריך:
- להקליק על תיקיית הדמויות Sprites בכפתור הימני של העכבר.
- בתפריט שצץ לבחור Add Group כדי ליצור תת-תיקיה לדמויות.
- נפתח חלון עם שדה שבו כותבים את שם התיקיה. למרבה הנוחות אפשר לתת לתיקיה שם בעברית, לכן כדאי לקרוא לה "משטחים".
- לגרור לתיקיית המשטחים את כל דמויות המשטחים: המשטח הפשוט, המדרונות, המסוע, וגם הפניה והחבל (שקשורים למשטחים).
הארגון בתיקיות לא משפיע על המשחק, הוא נועד רק לנוחיות שלנו (בדומה לפעולת ההערה ). ככה כשעובדים על אויבים אפשר לסגור את תיקיית המשטחים, וכשעובדים על סופר מריו ומצבים מחוזקים אחרים של מריו אז אפשר לסגור את תיקיית האויבים (שניצור בהמשך).
עכשיו תורכם: # לארגן את הדמויות של מריו בתיקיה בשם "מריו".
|
- | מדרון | - |