יצירת משחק פלטפורמה ב-Game Maker

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

כמה דברים שחשוב לדעת על פלטפורמה במשחק:

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

יצירת האובייקטים

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

כעת ניצור שני אובייקטים:

1. אוביקט platform עבור הפלטפורמה, נשייך לו את הספרייט שיצרנו כמשטח, שימו לב, לא לשכוח לסמן V בשדה Solid במאפייני האוביקט.

platform

2. אוביקט Player עבור הדמות, ונשייך לה את הספרייט שיצרנו עבורה.

בדיקה אם יש פלטפורמה

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

פעולות לאירוע step

1. בדיקה האם מתחת לדמות האוביקט אין כלום (פלטפורמה). אם אין פלטפורמה נוסיף לדמות פעולה של משיכה כלפי מטה, אם יש פלטפורמה, נעצור את המשיכה של הדמות כלפי מטה.
ל-game maker יש פעולה מיוחדת לבדוק אם יש מתחת לאוביקט והיא Check Empty שנמצאת בלשונית control של הפעולות.

הבדיקה היא בין האוביקט שלנו לכל אוביקט אחר שנמצא מתחתיה וגם מוגדר solid.

check Empty

2. הוספת פעולה Set Gravity

אם אין אוביקט solid מתחת לדמות נוסיף פעולת set gravity ובשדה direction נגדיר את הכיוון כלפי מטה, כלומר 270. כיוונים מוגדרים כמו זויות במעגל נגד כיוון השעון, ולכן ימינה=0, למטה=270, שמאלה=180 ולמעלה=90.

בשדה gravity נציין ערך נמוך מ-1, בד”כ 0.5 מספיק ליצירת משיכה של הדמות כלפי מטה.

gravity

3. כעת נגדיר מה קורה אם מתחת לדמות יש אוביקט שהוא solid.

שוב נוסיף את פעולת Set Gravity אבל הפעם נציין בשדה gravity את הערך 0. כך נגרום לעצירה של הדמות.

התנגשות עם פלטפורמה

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

נוסיף לדמות אירוע התנגשות עם פלטפורמה ואת הפעולות הבאות:

1. move to contact

  • בשדה direction נציין 270, כלומר כלפי מטה
  • בשדה maximum נגדיר את המהירות המקסימלית שבה האוביקט ינוע כלפי מטה, אני ציינתי 12, אבל גם 5 זו מהירות מספיקה, והערך תלוי במרחק שיש לדמות לעבור בדרך למטה.
  • והדבר האחרון – לציין את התנועה לאוביקטים שהם מסוג solid.

כך יראה חלון האפשרויות של הפעולה move to contact:

move to contact

2. Vertical Speed

הפעולה האחרונה שנוסיף לאירוע ההתנגשות היא Set Vertical Speed עם הערך 0. כך נגרום לעמוד על הפלטפורמה ולא להמשיך ליפול כלפי מטה.

תנועה של הדמות לצדדים

יש יותר מדרך אחת להזיז את הדמות ע”י מקשי החצים, אני מעדיפה את האירועים key press ו-key release

1. הוסיפו אירוע key press right והוסיפו לו את הפעולות:

  • move free קבעו את הכיוון לימין ואת המהירות ל-5
  • change sprite פעולה של שינוי הספרייט לספרייט שפונה לכיוון ימין.

2. חזרו על אותן פעולות לאירוע key press left (כמובן קבעו את הכיוון והספרייט לצד שמאל הפעם).

3. הוסיפו אירוע key release right והוסיפו לו פעולה של move free. כדי שהדמות תעצור, לחצו על הריבוע האמצעי וקבעו את המהירות ל-0.

כך יראה חלון האפשרויות:

stop

4. גם לאירוע key release left הוסיפו את הפעולה move free עם אותם מאפיינים כמו בסעיף 3.

קפיצה

כדי ליצור קפיצה של הדמות נוסיף אירוע keyboard ונשייך לו את הפעולה set vertical speed.

בשדה vert speed ציינו ערך שלילי (כדי שהדמות תקפוץ כלפי מעלה). קפיצה של 10 היא גבוהה מספיק.

חלון המאפיינים של הדמות יראה כך:

platform

מה שנותר לעשות הוא ליצור חדר, למקם בו מופעים של הפלטפורמה ומופע אחד של הדמות.

לפוסט הזה יש 9 תגובות

  1. ofek gani

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

  2. איתמר

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

  3. יעל חקשוריאן

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

  4. מרי

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

  5. איליה

    נו מה אתם רצינים באמת?
    יעל שמעי פעולת DD
    או באופן מפורט יותר DRAG and DROP
    זאת פעולה לילדים קטנים…
    אני ממליץ לך בחום לכתוב מדריכים על GML
    game maker language
    תעשי אותם מדריכים
    רק עם קודים…
    למשל ללכת לצד שמאל את עושה את הקוד הבא:
    if(keyboard_check(vk_right))
    {
    x+=3;
    }
    מקווה שתקשיבי להצעתי

    1. יעל חקשוריאן

      איליה, תודה על ההצעה.
      יכול להיות שבאמת אני אכתוב גם מדריכים על GML, אבל רציתי לאפשר למי שלא מבין בתכנות, להתחיל ליצור משחק פשוט בלי קוד.
      מהפניות שקיבלתי דרך האתר – הבנתי שאנשים לא יודעים בכלל איך להתחיל ליצור משחק מחשב ולכן החלטתי לכתוב סדרה של מדריכים מההתחלה – התקנה של התוכנה ובהמשך אני אכתוב על מושגים בסיסיים בתכנות, כמו גם על אובייקטים ופעולות ותכנות ב- GML.
      ד.א – אם תרצה לכתוב (פוסט אורח, או באופן קבוע) באתר – צור איתי קשר באמצעות הטופס – אני אשמח.

  6. יעל חקשוריאן

    תבדוק שני דברים:
    הראשון – הפלטפורמה צריכה להיות מסוג solid (ההגדרה היא במאפיינים של אוביקט הפלטפורמה)
    השני – מלבד אירוע צעדים, צריך להגדיר גם אירוע של התנגשות עם פלטפורמה ולהוסיף לה את הפעולות:
    move to contact – והגדר את הכיוון כלפי מטה (270) והקפד לסמן את האפשרות solid objects
    Set Vertical Speed – להגדיר על 0 – כדי שתהיה עצירה.

  7. OldCrash

    יש לי בעיה.. שאני לוחץ על למעה הוא קופץ אבל כשאני זז לצדדים הוא נתקע איזה שניה באויר ונופל לאט יותר…
    עשיתי בול לפי המדריך וכדי להשוות הורדתי את הסורס שלכם ועדיין אותה בעיה.
    אני משתמש בגרסה האחרונה 8.1
    תודה [=

    1. שי

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

להגיב על יעל חקשוריאן לבטל