תכנות לילדים באמצעות Game Maker/מריו/תנועה



שיטת התנועהעריכה

במשחקים הראשונים הזזנו אובייקטים באמצעות פעולות תנועה שקבעו את משתנה המהירות המהירות speed, ואז Game Maker הזיז את האובייקט באופן אוטומטי בכל צעד של המשחק. לעומת זאת, במשחק טטריס שינינו בעצמנו את משתני הקורדינטות x ו-y כדי להזיז את הצורה הנופלת. באיזו משתי השיטות האלה נשתמש הפעם?

במשחקי פלטפורמה בדרך כלל נוח לשלב בין שתי השיטות: את התנועה האופקית (ימינה ושמאלה) לעשות באמצעות שינוי המשתנה x, ואת התנועה האנכית (למעלה ולמטה) לתת ל-Game Maker לעשות לפי משתנה המהירות speed. בהמשך נראה איך ההפרדה הזאת עוזרת.

נתחיל בתנועה האופקית.

 

אתגר:

רוצה לנסות להזיז את מריו ימינה ושמאלה בעצמך? יש לך כבר את הידע הדרוש - כדאי לך לנסות. אחר כך תמיד אפשר להמשיך ולקרוא את הדרך שלי.

תנועה ימינהעריכה

כדי לתכנת את מריו לזוז ימינה צריכים:

  1.   להוסיף לאובייקט מריו אירוע מקש עבור חץ ימינה Right, כי צריך להזיז אותו כל עוד המשתמש לוחץ על החץ.
  2.   באירוע הזה להוסיף 4 למשתנה x (לסמן Relative) כדי להזיז את מריו 4 פיקסלים ימינה.

  מריו זז ימינה כל עוד לוחצים על החץ, ועוצר כשמשחררים את החץ.




כשמריו זז הוא צריך להיראות הולך, לא עומד. כלומר: צריך להציג את ההנפשה ברצף ולא להישאר על התמונה הראשונה של הדמות. בשביל זה צריך:

  1.   להוסיף אירוע לחיצה על מקש Right, כדי לדעת מתי מריו מתחיל ללכת ימינה.
  2.   באירוע הזה לשנות את המשתנה image_speed ל-0.5 (או למהירות אחרת - כדאי להפעיל את המשחק כדי לראות איזו מהירות הנפשה יוצאת טוב).
  3.   להוסיף אירוע שחרור מקש Right, כדי לדעת מתי מריו עוצר.
  4.   באירוע הזה לשנות את המשתנה image_speed חזרה ל-0 כדי לעצור את ההנפשה.
  5.   לשנות גם את המשתנה image_index ל-0 כדי להציג את התת-תמונה של מריו העומד.

  מריו נראה הולך כשהוא זז ימינה.




תנועה שמאלהעריכה

התנועה שמאלה זהה לתנועה ימינה, מלבד בכיוון של הדמות ובערך שמוסיפים למשתנה x. לכן אפשר פשוט לשכפל את שלושת האירועים של מקש Right לארועים הזהים עבור מקש Left (להקליק על האירועים בכפתור הימני של העכבר, ובתפריט שצץ לבחור Duplicate Event).

  באירוע מקש שמאלה, צריך לשנות את פעולת ההצבה  : להוסיף למשתנה x את הערך -4 כדי להזיז את מריו 4 פיקסלים שמאלה.


  מריו יודע ללכת גם שמאלה, אבל הדמות שלו עדיין פונה ימינה.




בשביל שמריו יפנה שמאלה אפשר ליצור דמות חדשה של מריו הולך שמאלה ואז להחליף את הדמות של מריו באירוע הלחיצה על החץ. אבל יש דרך לעשות זאת גם בלי ליצור עוד דמות: זוכרים את המשתנה image_xscale? במשחק טטריס הצבנו בו את מספר הריבועים בשורה כדי להרחיב ריבוע אחד לרוחב של שורה שלמה. אבל מה יקרה אם נציב בו את המספר -1?

ככה נראית הדמות של מריו כשמשנים את הערך של המשתנה image_xscale למספרים שונים:

זאת אומרת שבשביל להפנות את מריו שמאלה, אפשר פשוט להציב -1 במשתנה image_xscale . לכן מה שצריך לעשות:

  1.   באירוע לחיצה על מקש Left להציב במשתנה image_xscale את המספר -1  .
  2.   באירוע לחיצה על מקש Right להציב במשתנה image_xscale חזרה את המספר 1  .

  מריו מסתובב שמאלה וימינה לפי החצים. נסו לסובב אותו בלי לגרום לו ללכת, אלא רק ללחוץ על החץ לרגע קצר; מה קורה?




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

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

הפתרון פשוט: להזיז את ראשית הצירים לאמצע הדמות. ככה חצי מהדמות תהיה מימין ל-x וחצי משמאל, גם כשמריו פונה ימינה וגם כשהוא פונה שמאלה.

לכן צריך לפתוח את חלון תכונות הדמות של מריו, ושם לשנות את ראשית הצירים (Origin): לכתוב 15 בשדה X. (הדמות היא ברוחב 31 פיקסלים, וה-X של הפיקסל הראשון הוא 0, לכן אמצע הדמות הוא בפיקסל 15.)



  עכשיו מריו מסתובב בלי לשנות מקום.




- תנועה
תרגילים
-