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

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

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

ועכשיו – התנגשות עם דמות אויב.

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

הגדרת חיים

את החיים נגדיר באוביקט מנהל באירוע של התחלת המשחק (game start).

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

score

אוביקט מנהל לא צריך ייצוג גרפי ולכן לא יהיה לו sprite.

ל-Game Maker יש אירוע עבור מצב שבו אין יותר חיים, גם הוא נמצא באירועים תחת הקטגוריה other ונקרא no more lives. אם לא נגדיר מה קורה כשאין יותר החיים, החיים ימשיכו לרדת ב-1 בכל פעם שיתרחש אירוע התנגשות אפילו מתחת לאפס.
אנחנו לא רוצים שמצב כזה יקרה, לכן נוסיף לאוביקט מנהל אירוע no more lives ונשייך לו פעולה של סוף המשחק End Game שנמצא בלשונית main2.

כך יראה האוביקט ובו הגדרת החיים:

manager object

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

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

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

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

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

2. השמעת סאונד, ביחרו את הסאונד שהגדרתם עבור ההתנגשות

3. הורדה של החיים ב-1. שימו לב, יש לסמן V בשדה Relative, אחרת ערך החיים יוגדר מחדש ל-1, במקום להוריד מכמות החיים 1.

כך יראה המסך של הדמות הראשית באירוע ההתנגשות:

collision

הגדרת תנועה לדמות האויב

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

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

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

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

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

בפוסט הבא – הוספת בונוסים וניקוד.

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

בפוסט הזה ובאלו שאחריו אני אתמקד ביצירת משחק ב-Game Maker, כאשר כל פעם נוסיף למשחק תכונות ואלמנטים אחרים. כל האלמנטים שאשתמש בהם נמצאים בספריית Game Maker 8, תוכלו למצוא אותה בספריית program files לאחר שתתקינו את התוכנה.

יצירת בסיס למשחק

במשחק הבסיסי יהיו האלמנטים הבאים:

דמות ראשית

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

דמות אויב

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

  • השמעת סאונד
  • הקפצת הדמות הראשית לנקודת ההתחלה
  • הורדת החיים ב-1

חיים

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

בונוסים

כל בונוס שהדמות הראשית אוספת, תזכה ב-10 נקודות וישמע סאונד מתאים

ניקוד

ולכן אנחנו צריכים גם ניקוד, שמתחיל ב-0.

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

יצירת ספרייטים

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

אז כמה ספרייטים אנחנו צריכים?

4 לדמות הראשית (הקפידו לשמור אותם בתיקייה נפרדת)

1 לדמות האויב (כמובן שאפשר יותר, אבל אנחנו נתחיל בזה)

1 לבונוס

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

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

כעת ניצור 3 אוביקטים עבור: דמות ראשית, דמות אויב והבונוס.

create an Objectלחיצה על אייקון יצירת אוביקט בסרגל העליון תיצור אוביקט חדש.

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

יצירת סאונד

לחצו על אייקון יצירת סאונד ואח"כ על Load sound. במסך שיפתח בחרו אחד מקבצי הסאונד, אני בחרתי את beep1 וקראתי לו coin1, כיוון שהוא יהיה הסאונד שישמע כאשר הדמות תאסוף מטבע, ואת הסאונד boomshot עבור ההתקלות עם האויב.

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

my First Game screen1

הוספת אירועים ופעולות לאוביקטים

נתחיל עם אירועים עבור הדמות הראשית.

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

1. תנועה

כדי שהדמות תזוז שמאלה, נוסיף אירוע לחיצה key press left ונשייך לו את הפעולה move fixed ע"י גרירה של האייקון לחלון ה-actions. (פעולה זו נמצאת בלשונית move של הפעולות). במאפייני התנועה נציין תנועה שמאלה ומהירות 3.

move left

2. שינוי ספרייט

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

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

change sprite

3. פעולת עצירה

כדי שהדמות לא תמשיך לזוז כאשר אנחנו מפסיקים ללחוץ על מקש החץ במקלדת, אנחנו צריכים פעולת עצירה. נוסיף אירוע key release left ונשייך לו פעולה move fixed. הפעם במאפיינים נבחר את הריבוע המרכזי, שמסמל עצירה ונשאיר את המהירות על 0.

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

stop

יש לבצע את כל הפעולות בסעיפים 1-3 עבור כל הכיוונים.

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

main character

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

נחזור לפעולות. מה צריך כדי להחזיר את הדמות הראשית מהצד השני?

4. אירוע outside room

נוסיף את האירוע outside room שנמצא בקטגוריה other של האירועים ונשייך לו את הפעולה wrap screen שנמצאת בלשונית move. שימו לב, יש לבחור באפשרות in both directions, כיוון שאנחנו רוצים שהדמות תוכל להיכנס חזרה לחדר מכל הצדדים.

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

הרצה של המשחק

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

קובץ gmk הכולל את כל השלבים להורדה.

בפוסט הבא – התנגשות עם דמות אויב.

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

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

יצירת אוביקט שזז על המסך באמצעות העכבר

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

שלב ראשון – יצירת sprite לאוביקט

לחצו על אייקון יצירת ספרייט בסרגל העליון create a Sprite

בחלון מאפייני sprite לחצו על Load Sprite וטענו תמונה. אני בחרתי בתמונה burger.

שלב שני – יצירת אוביקט

create an Objectלחצו על איקון יצירת אוביקט בסרגל העליון

בחלון אפשרויות של האוביקט הגדירו את ה-sprite שיצרתם בשלב הראשון לאוביקט, במקרה הזה, את burger.

object

שלב שלישי – הגדרת אירוע ופעולות

הגדרת אירוע step

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

הגדרת פעולות

הפעולה שנבצע תלויה בלחיצה של עכבר, לכן נבצע בדיקה אם נלחץ העכבר ולשם כך נתשמש בפעולה Check Mouse שנמצאת בלשונית control של הפעולות.

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

object Actions

כעת נוסיף את הפעולה שתקפיץ את האוביקט לנקודה בה נלחץ העכבר. פעולה מסוג jump to position  ונגדיר עבורה את מיקום ה-X ו-Y.

עבור מיקום ה-X נציין: mouse_x, עבור מיקום ה-Y נציין: mouse_y. אלו פרמטרים קבועים עבור מיקום לחיצה של העכבר במסך.

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

קובץ דוגמא להורדה.