הוספת ניקוד וחיים למשחק

כדי להציג את הניקוד והחיים במשחק (גרסת Game Maker Studio) יש לבצע את הפעולות הבאות:

1. ראשית וודאו שיש לכם במשחק את האובייקטים הבאים:

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

דמות אויב שנעה באופן אקראי בחדר

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

2. הוסיפו אובייקט חדש עבור הניקוד, score_obj

הוסיפו לאובייקט זה אירוע Game Start ושייכו לו את הפעולה Set Score והגדירו את הניקוד על 0.

שימו לב, אין צורך לשייך ספרייט לאובייקט זה. כך יראה המסך:

score1

3. הוסיפו לאותו אובייקט, score_obj  אירוע Draw. אירוע Draw משמש עבור ציור/כתיבה על המסך.

4. שייכו לאירוע פעולת Draw Score והגדירו את המיקום בו תרצו להציג את הניקוד במסך (x,y) כך:

score2

5. הוסיפו אובייקט חדש עבור החיים lives_obj

6. הוסיפו לאובייקט זה אירוע Game Start ושייכו לו את הפעולה Set Lives והגדירו את החיים על 3.

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

7. הוסיפו אירוע No More Lives שנמצא ב- others ושייכו לו פעולה מתאימה (מעבר לחדר סיום או הצגת הודעה מתאימה)

8. הוסיפו לאובייקט, lives_obj אירוע Draw. ושייכו לו את פעולת Draw Life Image והגדירו את המיקום בו תרצו להציג את הניקוד במסך (x,y) כך:

lives

9. הוסיפו לדמות הראשית אירוע התנגשות עם האויב ושייכו לו את הפעולות הבאות:

הקפצה של הדמות לנקודת ההתחלה.

הורדה של החיים ב-1 וודאו שסימנתם את שדה Relative (כיוון שההורדה של החיים היא תמיד מכמה שנשארו).

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

מחיקה של מופע אובייקט המטבע

הוספת ניקוד +10. גם כאן יש לוודא ששדה Relative מסומן. (כיוון שהניקוד מצטבר).

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

הריצו את המשחק.

 

איך ליצור משחק מחשב פשוט – חלק ב'

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

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

אוביקט המטוס

נתחיל עם אוביקט המטוס ע"י יצירת ספרייט ואוביקט מתאימים.

לאוביקט המטוס נשייך אירוע אחד ופעולה אחת – כאשר המטוס מחוץ לחדר (אירוע outside room) נהרוס את המופע של האוביקט (destroy the instance).

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

אוביקט מנהל

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

לאוביקט זה נשייך שני אירועים: אירוע יצירה ואירוע alarm.

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

1. נבחר את האוביקט המתאים, במקרה זה airplaneObj

2. נגדיר את נקודת ה-X בה יופיע האוביקט. כדי להגדיר נקודה אקראית, נשתמש בפונקציה random ובסגריים נגדיר את התחום ממנו המחשב יחשב נקודה אקראית.
כדי שהמטוס לא יופיע מחוץ למסך נגדיר את רוחב המסך (כלומר רוחב החדר) פחות רוחב האוביקט של המטוס.
לדוגמא, רוחב החדר במקרה זה הוא 640 ורוחב המטוס הוא 128, ולכן הנקודה המקסימלית שהאוביקט יכול להופיע בו על ציר ה-X מבלי שהמטוס יחתך היא 512. אני הגדרתי 510. את הרוחב נגדיר בתוך סגריים אחרי שם הפונקציה, כך:

create airplane

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

ערך המהירות צריך להיות בערך כמו המהירות של תנועת הציפור והכיוון כלפי מטה. כדי להגדיר את הכיוון למטה הגדירו 270. למה? כיוונים מוגדרים כמו זויות במעגל נגד כיוון השעון, ולכן ימינה=0, למטה=270, שמאלה=180 ולמעלה=90.

 הוספת אירוע עבור יצירת מופעים נוספים של אוביקט המטוס

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

גם במקרה זה נרצה שהקריאה תהיה בכל פעם לאחר מספר צעדים שונה ולכן גם כאן נשתמש בפונקציה random. אבל כדי שהטווח יהיה מספיק רחב נגדיר טווח של 600 צעדים ומעלה לפחות. (כל 30 צעדים הם בערך שנייה אחת).
שימו לב, מטוס נוסף יכול להופיע גם במרווח של פחות משנייה אחת.  אם לא תרצו מצב כזה, אל תוסיפו את פונקציית random ופשוט הגדירו מספר קבוע של צעדים.

אירוע שעון מעורר

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

כך יראה חלון האפשרויות של האוביקט המנהל:

manager object

הוספת פעולות ואירועים לציפור

הוספת חיים וניקוד לאוביקט הציפור

לאוביקט הציפור נוסיף אירוע יצירה ונשייך לו את הפעולות הבאות:

הגדרת חיים – אני הגדרתי 3, תוכלו להגדיר כמות אחרת אם תרצו. – set lives

הגדרת ניקוד – מתחיל ב- 0 – set the score

הצגת הניקוד והחיים בחלון המשחק – set the score caption info

 

אירוע No more lives

לאוביקט הציפור נוסיף אירוע נוסף – no more lives, זהו אירוע שמור של game maker עבור מצב בו אין יותר חיים. נשייך לו פעולה של מעבר לחדר של סיום המשחק (לא תוכלו ליצור מעבר לחדר שלא קיים, לכן צרו תחילה חדר שנקרא end game). משמעות אירוע זה היא שכאשר נגמרים החיים שהגדרתם קודם, המשחק יעבור למסך הסיום.

הוספת אירוע התנגשות

לאוביקט הציפור נוסיף אירוע התנגשות עם המטוס ונשייך לו פעולה של הריסת מופע המטוס (אחרת תמשיך להיות התנגשות עם הציפור).

bird object

 הרצת המשחק

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

בפוסט הבא – המשך המדריך: הוספת אוביקט גוזל עם אירועים ופעולות מתאימים.

 

אהבתם את הפוסט? אל תשכחו לעשות לייק [fblike]

יצירת משחק בסיסי ב-Game Maker חלק 3

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

בפוסט הזה נוסיף בונוסים וניקוד.

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

  1. השמעת סאונד מתאים
  2. מחיקת המופע של הבונוס מהחדר
  3. הוספת ניקוד

הוספת ניקוד

ל-Game Maker יש פעולות מוגדרות עבור ניקוד בלשונית Score. את פעולות  הניקוד נוסיף לאוביקט המנהל שיצרנו בפוסט הקודם.

לאירוע Game Start נוסיף פעולת Set score ונשאיר את הערך של הניקוד על 0, כיוון שזה הניקוד לתחילת המשחק.

בפעולה של Set the score caption נשנה את האפשרות של show score מ-don't show ל-show.

כעת יש להגדיר מתי הניקוד משתנה וזה קורה כאשר יש אירוע התנגשות בין הדמות הראשית לאוביקט הבונוס.
נעבור לאוביקט הדמות הראשית ונוסיף לו אירוע התנגשות עם אוביקט הבונוס.

הוספת סאונד

בחרו את הסאונד שיצרתם בחלק 1 עבור איסוף בונוס.

מחיקת המופע של הבונוס

כיוון שהוספנו את האירוע לדמות הראשית, יש לשנות את התייחסות פעולה זו לאוביקט הבונוס, כלומר בחרו באפשרות של Destroy Instance את other.

שינוי ערך הניקוד

בהוספת הפעולה Set Score יש להגדיר את ערך new score ל[+10] וחשוב לסמן V באפשרות Relative כיוון שהוספת הניקוד היא תמיד יחסית לניקוד שהיה קודם.

set score

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

קובץ המשחק המעודכן להורדה

הצגת הניקוד במסך במיקום מוגדר

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

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

הגדרת פונט

חשוב לפני ביצוע הפעולות ליצור פונט חדש – קליק ימני על תיקיית הפונטים ובחירה ב – Create Font.

בחלון האפשרויות של הפונט יש לבחור את סוג הפונט וגודל הפונט.

כדאי לתת שם לפונט שיתאר את מטרתו, למשל ScoreFont, או תיאור של הפונט עצמו, למשל ArialBold12, זה תמיד עוזר לי לדעת איך הפונט יראה.

יצירת אוביקט

יש ליצור אוביקט (ללא sprite) עבור הניקוד.

1. בתיקיית objects ניצור אוביקט חדש בשם: "objectScore"

2. לאוביקט יש להוסיף אירוע מסוג Draw

3. לאירוע יש להוסיף את הפעולות (actions) הבאות:

set font – נמצא בלשונית Draw ולבחור את הפונט שיצרנו קודם ScoreFont

set the color – גם נמצא בלשונית Draw ולבחור את הצבע, שימו לב, שיהיה צבע ניגודי לרקע עליו ימוקם הטקסט.

Draw score בלשונית Score עדכנו את האפשרויות לפי:

X= מיקום על ציר הרוחב Y= מיקום על ציר הרוחב, למשל אם נרצה שהניקוד יופיע בקצה השמאלי העליון של החדר נציין עבור X=0, Y=0

שדה caption הוא הטקסט שיופיע עבור הניקוד, כדאי להשאיר את ברירת המחדל "Score:".
אם אפשרות Relative מסומנת, אז המיקום של האוביקט יהיה יחסית להכין שתמקמו את האוביקט בחדר בפועל, אם האפשרות לא תהיה מסומנת מיקום האוביקט יהיה בדיוק ב-X, Y שציינתם.

score

מיקום האוביקט בחדר

1. פתחו את החדר שבו אתם רוצים להציג את הניקוד ובלשונית objects בחרו את אוביקט הניקוד, objectScore.

2. מקמו את האוביקט בחדר. שימו לב, כדי לא למחוק אוביקט אחר שמופיע בחדר, וודאו שהאפשרות delete underline אינה מסומנת.
שימו לב לאוביקט אין ייצוג גרפי (sprite) ולכן הוא יראה בחדר כעיגול כחול עם סימן שאלה ורוד עליו.

ולאלו מכם שרוצים לראות איך זה מיושם בקובץ עצמו, אני מצרפת דוגמא – אוביקט score שהוספתי למשחק treasure (קובץ gmk).