יצירת משחק פלטפורמה ב-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

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

0 0 הצבעות
דירוג הפוסט
רישום מנוי להודעות
להודיע על
guest

9 תגובות
החדש ביותר
הישן ביותר הכי נבחר
משוב מוטמע
צפייה בכל התגובות
ofek gani

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

איתמר

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

מרי

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

איליה

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

OldCrash

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

שי

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