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

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

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

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

  • ירייה היא בעצם מופע של אוביקט שנע במהירות במסך, האוביקט אינו מוצב בחדר, הוא יופיע בפעולה יזומה של השחקן.
  • כיוון הירי צריך להשתנות לפי הכיוון אליו פונה האוביקט היורה
  • ירי לא מתבצע באופן רציף (כמו הליכה, או ריצה), אלא בהפסקות זמן קבועות.
  • בעת פגיעה באוביקט אחר או מחוץ לחדר יש להרוס את המופע של הירי.
  • כיוונים מוגדרים כמו זויות במעגל נגד כיוון השעון, ולכן ימינה=0, למטה=270, שמאלה=180 ולמעלה=90.

לפני הכל כמו תמיד, ניצור ספרייט ואוביקט לירייה.

הגדרת משתנה עבור ירי

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

  1. הוסיפו אירוע יצירה לדמות הראשית
  2. הוסיפו פעולה של הגדרת משתנה can_shoot שערכו יהיה=1 (1 פירושו יכול לירות ו-0 פירושו לא יכול לירות). הגדרת משתנה נמצא בלשונית control של הפעולות.

can shoot

הגדרת משתנה עבור כיוון

כדי שהירייה תהיה תמיד לכיוון אליו פונה הדמות הראשית, נוסיף לכל כיוון של הדמות משתנה עם ערך ייחודי.
איך עושים את זה? עברו לדמות הראשית ופעלו לפי השלבים הבאים: באירוע יצירה של הדמות נוסיף פעולה של הגדרת משתנה dir וניתן לו ערך [1], שיסמל את הכיוון ימינה (זה כיוון שהדמות בהתחלה פונה ימינה).
באירועים של הקשה על מקשי החצים, נוסיף פעולה של שינוי המשתנה dir. למשל, כאשר הדמות פונה למטה נגדיר את dir=2 וכך הלאה, עד שנגדיר את כל הכיוונים. בשלב זה חלון מאפייני הדמות יראה כך:

direction

כעת נוסיף את אירוע הירי.

יצירת אירוע ירי

במשחק הזה פעולת הירי תתבצע כאשר השחקן לוחץ על מקש הרווח כדי ליצור אירוע ירי נבצע שתי בדיקות, אחת – האם ניתן לבצע פעולת ירי, שתיים – לאיזה כיוון הדמות פונה.
הוסיפו אירוע לחיצה על מקש הרווח לדמות הראשית לאירוע זה הוסיפו פעולה של בדיקת המשתנה can_shoot לערך 1  (כלומר הפעולות הבאות יתבצעו אם המשתנה can_shoot=1).
מיד אח”כ הוסיפו בדיקה של המשתנה dir. אם dir=1 הוסיפו את הפעולות הבאות לאירוע ירי, כיוון שמדובר במספר פעולות נתחום אותן בבלוק פעולות:

create moving instance של אוביקט הירי

  1. בשדה object בחרו את אוביקט הירייה
  2. הגדירו את ה-X וה-Y ל16 ו-16, כיוון שהדמות שלנו בגודל 32X32 והכדור יצא ממרכז הדמות.
  3. סמנו V בשדה Relative אחרת הכדור יצא מנקודת 16X16 של החדר ולא של הדמות הראשית.
  4. בשדה speed הגדירו מהירות 30 לפחות ובשדה direction את הספרה 0, שהיא כאמור מסמלת את הכיוון ימין.

כך יראה חלון המאפיינים של הפעולה create moving:

create moving

שינוי המשתנה can_shoot ל-0 והוספת שעון מעורר

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

  1. שינוי ערך המשתנה can_shoot ל-0.
  2. הוספת פעולת שעון מעורר ל-5 צעדים, הגדירו את Alarm 0 ל-5 צעדים.
    alarm

יותר מאוחר נוסיף אירוע שעון מעורר שמטרתו להחזיר את ערך המשתנה can_shoot ל-1.

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

  • הוספת אוביקט הירי כולל ארבעת השלבים המפורטים למעלה, כאשר השינוי היחיד הוא הכיוון של אוביקט shot.
  • שינוי המשתנה can_shoot
  • הוספת שעון מעורר Alarm 0

הוספת אירוע שעון מעורר

כדי שפעולת Alarm 0 תתבצע, צריך שיהיה לה אירוע מקביל, לכן נוסיף אירוע Alarm 0 לדמות הראשית, שימו לב שמספר ה-Alarm בפעולה, צריך להיות זהה לזה של האירוע לו אליו היא משויכת.

לאירוע זה הוסיפו פעולת הגדרת ערך המשתנה can_shoot בחזרה ל-1.

כך יראה חלון הפעולות של אירוע הקשה על מקש הרווח לאחר יצירת כל הפעולות של אירוע לחיצה על מקש הרווח:

shoot to direction

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

שימו לב, לאוביקט הירי חשוב להוסיף אירוע של outside room בו נשמיד את המופע של אוביקט הירי, כמו כן בעת התנגשות בין שני האוביקטים (ירי ואויב), יש להרוס את המופע של שני האוביקטים.

כדי לשפר את אפקט הירי, הוסיפו סאונד לפעולת הירייה וסאונד לפעולת ההתנגשות.

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

  1. יקיר לנקרי

    תודה רבה

  2. יקיר לנקרי

    איך עושים בלוק?

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

      יקיר, בלוק הוא תיחום של קבוצת פעולות. מוסיפים אותו ע”י הפעולה start block ומסיימים ע”י הפעולה end block. ביניהם מגדירים את הפעולות שרוצים שיתבצעו יחד. הפעולה block נמצאת בלשונית control בחלק של other.
      דוגמא לblock אתה יכול לראות בצילום מסך האחרון במדריך זה.
      בהצלחה!

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

    כדי שתהיה השהייה בין הירי בכל הכיוונים, צריך להוסיף את הבדיקה של can_shoot=1 בכל אחת מהבדיקות של כיוון שינוי.

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

  4. רוני

    מדריך מעולה. תודה!

להגיב על יקיר לנקרי לבטל