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

כדי להציג את הניקוד והחיים במשחק (גרסת 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 מסומן. (כיוון שהניקוד מצטבר).

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

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

 

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

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

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

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

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

יצירה של אובייקטים

צרו תחילה ספרייטים ואובייקטים עבור הדמות הראשית והטיפה (Bubble_obj)

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

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

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

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

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

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

לאירוע זה נוסיף את הבדיקה Test Instance Count ובמאפיינים נציין איזה פריט לבדוק וכמה פריטים צריכים להיות:

הבדיקה שאני עשיתי – האם מספר הפריטים קטן מ-1 (זה אומר שלא נשארו אובייקטים מסוג זה בשלב)

Test Instance Count

 

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

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

אני הוספתי בחדר השני אירוע Draw שיכתוב את הטקסט: You Win במסך. תוכלו להוריד את קובץ המשחק לדוגמה כאן. (21kb)

 

פשוט וקל, לא?

 

 

איך ליצור טיימר (Timer) ב- Game Maker

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

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

מה צריך בשביל להגביל את המשחק בדקה?

אוביקט Timer

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

ניצור אוביקט בשם timer

אירוע Create

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

לאירוע זה נוסיף את הפעולות הבאות:

1. יצירת משתנה בשם time ונגדיר לו ערך 60 (כיוון שבכל דקה יש 60 שניות).

var time

2. הפעלה של שעון (alarm) לאחר 30 צעדים (שזה שווה ערך לשנייה אחת)

alarm

אירוע שעון – Alarm

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

מוסיפים לאירוע שעון את הפעולות הבאות (שימו לב, יש להוסיף אותו ל- alarm0 שהוא אותו שעון שמופיע באירוע create):

הפחתה של 1 למשתנה time (שימו לב שאתם נותנים לו בדיוק את אותו השם שנתתם באירוע create). יש לסמן את התיבה relative כיוון שאנחנו רוצים שכל פעם תופחת שנייה מסך כל השניות הנותרות.

time-1

בדיקה של ערך משתנה time

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

בדיקה האם המשתנה קטן מאפס:

if time smaller than 0את הפעולות הבאות נתחום בבלוק:

1. הצגת הודעה למשתמש (כדי לא לסגור את המשחק בפתאומיות)

game over

2. סגירה של המשחק (נמצא בלשונית main2 בפעולות).

אם המשתנה אינו קטן מאפס:

נפעיל שוב את שעון 0 אחרי 30 צעדים (כלומר נספור עוד שניה, בדיוק כפי שבצענו באירוע create).

alarm

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

alarm actions

הצגה של השניות על המסך

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

הוספת אירוע ציור Draw

לאירוע draw נוסיף פעולה Draw Variable שנמצא בלשונית control.

נציין איזה משתנה להציג – time וכן את המיקום שלו.

draw time

אני קבעתי x=100 ו- y=30, אבל כמובן תוכלו להגדיר את המיקום במקום המתאים לכם במסך.

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

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

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

 

חדרים ב-Game Maker

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

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

במדריך זה הסבר קצר על יצירת חדרים ומעברים בין חדרים.

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

create Room

מאפייני החדר

לכל חדר 5 לשוניות עבור מאפיינים שונים:

background – בלשונית זו תוכלו לבחור רקע לחדר (תמונה או צבע)

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

objects – לשונית עבור הוספת האוביקטים לחדר

setting – מאפייני החדר עצמו כמו, גודל (רוחב וגובה), מהירות  ושם החדר.

tiles – לשונית עבור הוספת אריחים לחדר.

Room Properties

הגדרת כותרת החדר

כדי להגדיר כותרת לחדר, עברו ללשונית setting.

 

room Setting

שדה Name לא מוצג במשחק עצמו, זהו שם החדר שמופיע בסרגל עריכה ב-game maker תחת ספריית Rooms.

Caption for the room – המלל שתקלידו בשדה זה יופיע בכותרת המשחק לאחר הפעלתו.

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

מעבר בין חדרים

כדי ליצור מעבר בין חדרים, יש ליצור יותר מחדר אחד, כמובן. בדוגמא למדריך זה יצרתי שלושה חדרים: Menu, room1, room2.

שימו לב – החדר הראשון שיפתח בהפעלת המשחק הוא החדר שמופיע ראשון ברשימת החדרים ללא קשר לשם החדר. לדוגמא, אם תיצרו שני חדרים שנקראים start ו- end , אבל end יופיע ברשימה לפני start, אז בהפעלת המשחק יפתח חדר end.
זה מצב שגורם בד"כ לטעויות, אבל יש לו גם יתרון, אם תרצו לנסות שלב מסוים, מבלי לעבור את כל השלבים שמופיעים לפניו, תוכלו פשוט לגרור אותו לראש הרשימה ולהריץ את המשחק.

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

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

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

לכל אחד מהלחצים הוסיפו אירוע Left Released ושייכו לו פעולה של מעבר חדר. התאימו לכל לחצן את המעבר לחדר המתאים (הבא והקודם).

לפעולת מעבר בין חדרים יש אפשרות של בחירת אפקט מעבר (transition), כאשר ברירת המחדל היא ללא אפקט.

next Room

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

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

הצגת שם החדר

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

1. צרו אובייקט חדש ללא ספרייט – textMngr

2. הוסיפו לאוביקט  אירוע draw

3. שייכו לאירוע זה את הפעולות עבור הצגת טקסט. אם אינכם זוכרים כיצד, קראו שוב את הפוסט להצגת טקסט במיקום מוגדר מראש.
שימו לב, כדי להציג את כותרת החדר, השתמשו במשתנה draw var וציינו בשדה variable את המשתנה room_caption. משתנה זה מציג את המלל שהקלדתם בשדה Caption for the room בלשונית setting של החדר. כך יראה חלון המאפיינים של אוביקט textMngr.

Drow Room

4. הוסיפו את האוביקט לחדר

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

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

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

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

בתוכנת 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).