איך לעשות אובייקט מתפוצץ

מיקול הפוסט הזה בשבילך 🙂

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

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

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

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

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

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

לא זוכרים איך? קראו את המדריך ליצירת משחק בסיסי.

הוספת אירועים ופעולות לדמות הראשית

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

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

השמעת סאונד מתאים (לא חובה)

פעולה של שינוי מופע אובייקט – Change instance בחלון המאפיינים שיפתח יש לבחור את האובייקט שיצרתם עבור ההתפוצצות ולשנות בשדה preform events את האפשרות מ- no ל- yes (אחרת לא יוצגו כל רצף התמונות ליצירת אנימציה של התפוצצות).

כך יראה חלון המאפיינים:

change instance

 

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

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

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

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

alarm

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

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

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

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

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

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

אוביקט המטוס

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

לאוביקט המטוס נשייך אירוע אחד ופעולה אחת – כאשר המטוס מחוץ לחדר (אירוע 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]

איך ליצור טיימר (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 שניות תופיע הודעה על סיום המשחק.

 

Time Line ב- Game maker

Time Line ב-Game Maker מיועד עבור יצירת אירועים בזמן מוגדר מראש.

מה ההבדל בין  אירוע השעון המעורר – alarm ל- time line? הראשון מיועד עבור יצירת אירוע אחד בזמן נתון, ואילו time line מאפשר לנו לקבוע רצף של אירועים בזמן נתון. בנוסף נוכל להשתמש ברצף האירועים האלו בכל פעם שנרצה ע"י הפעלת ה-time line מבלי ליצור אותם שנית.

אז איך עובדים עם time line? בואו נתחיל.

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

הגדרת התרחשות הפעולות

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

  • אוביקט דמות השומר תתחיל לפטרל בחדר (תזוזה ימינה ושמאלה)
  • תידלק אש בכניסה

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

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

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

הוספת time line

בסרגל הכלים לחצו על אייקון הוספת time line.

time Line
יפתח חלון המאפיינים של time line:

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

create time line

יפתח חלון הגדרת רגע (moment) עבור האירוע:

add moment

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

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

create time line

תוכלו להוסיף עוד אירועים ועוד רגעים (step) שיקרו באותו time line.

מאפיינים נוספים:
Merge – ממזג את הפעולות של הזמנים שנבחרו.
Shift – מוסיף מספר צעדים לכל הזמנים שנבחרו.

לאחר הגדרת Time Line ניתן להקצות אותו למופע של אובייקט כלשהו ע"י הפעולה Set time line.

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

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

1. התנגשות של הדמות הראשית עם החומה – תגרום לעצירת התנועה של הדמות, ואירוע התנגשות של הדמות המשנית תגרום לשינוי התנועה שלה לכיוון הנגדי.

2. הוסיפו אירוע התנגשות לדמות הראשית עם החומה, לאירוע זה שייכו פעולת Start moving in a direction וקבעו את התנועה לעצירה (סימון הריבוע האמצעי ומהירות 0).

stop

הוסיפו אירוע התנגשות לדמות המשנית עם החומה, לאירוע זה שייכו פעולת Revers horizontal.

3. כעת נוסיף אירוע התנגשות של הדמות הראשית עם הדלת, ובמקום לשייך לה את כל רצף הפעולות שאנחנו רוצים (תזוזה של הדמות המשנית, יצירת מופעים של אוביקט האש) נוסיף רק שתי פעולות: הריסת המופע של הדלת (כדי שהדמות תוכל להיכנס למבנה) והפעלת רצף הפעולות שב-time line שהגדרנו קודם. אירוע ה-time line נמצא בלשונית main2.

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

time Line5

יצירת החדר

צרו את החדר לפי המבנה הבא: (לא חייב להיות זהה לחלוטין, אבל חשוב להגדיר את הדמות הראשית מחוץ למבנה, ואת הדמות המשנית בתוך המבנה)

room

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

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