31st דצמ2012

איך לעשות אובייקט עוקב אחרי אובייקט

by יעל חקשוריאן

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

מתי נצטרך להשתמש במצב כזה? כשנרצה למשל, שדמות אויב תרדוף אחרי דמות ראשית.

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

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

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

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

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

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

step

לאירוע זה נשייך פעולה של step avoiding. פעולה זו נמצאת בלשונית Move בקטגוריית Steps:

step avoiding

Step Avoiding, בשונה מ- Step Twards נמנע מלעלות על הדמות אחריה עוקבים.

בחלון המאפיינים שנפתח נציין את ה-X ו-Y של הדמות שאחריה עוקבים ואת מהירות המעקב באופן הבא:

step avoiding

שימו לב, לפני ה-X וה- Y יופיע שם האובייקט ונקודה.

במקרה של הדוגמה שלי, שם האובייקט הוא boy ולכן נקודת ה-X תהיה boy.x ובאותו אופן יש להגדיר את נקודת ה- Y.

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

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

 

מעקב ושמירת מרחק

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

הבדיקה משתמשת בפקודה של Game Maker שבודקת את המרחק מאובייקט –  (distance_to_object(boy – בסוגריים נכתוב את שם האובייקט, כך יראה חלון המאפיינים של הבדיקה:

distance_to_object

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

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

06th דצמ2012

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

by יעל חקשוריאן

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

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

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

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

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

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

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

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

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

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

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

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

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

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

change instance

 

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

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

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

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

alarm

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

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

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

11th נוב2012

אובייקטים ספרייטים ומופעים

by יעל חקשוריאן

במדריך זה אסביר מה ההבדל בין אובייקטים ומופעים ומה הם ספרייטים ב-Game Maker.

 

אובייקט – Object

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

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

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

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

האובייקטים נשמרים בתיקייה ייעודית ב- Game Maker שנקראת Objects.

ספרייטים – Sprites

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

כל הגרפיקה במשחק, למעט הרקע היא ספרייטים.

ספרייטים נשמרים בתיקייה ייעודית שנקראת Sprites.

 

מופע – Inastance

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

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

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

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

 

 

 

 

 

30th ספט2012

sprite index – אינדקס של ספרייט

by יעל חקשוריאן

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

Subimages – תת תמונה

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

איך נראה רצף התמונות של ספרייט?

 

היכנסו לספרייט כלשהו על ידי לחיצה על אייקון הספרייט

אם הספרייט מכיל יותר מתמונה אחת תוכלו לראות את מספר התמונות שהוא כולל מתחת לגודל התמונה – Number of subimages.

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

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

edit sprite

כדי לערוך את התמונות או לשנות את הסדר שלהם לחצו על edit sprite:

edit_sprite

בחלון Sprite Editor תוכלו לראות את כל תתי התמונות של ספרייט זה:

sprite editor

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

שינוי של סדר התמונות

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

edit_sprite_move

 

עצירה של הרצת תתי התמונות בספרייט –  image_speed

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

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

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

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

Set variable image_speed=0
פעולה זו עוצרת את ההרצה האוטומטית של תתי התמונות ומציגה את התמונה הראשונה בלבד.

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

image_speed

 

 שינוי תת תמונה להצגה – image_index

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

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

2. נוסיף לכל כפתור אירוע לחיצה בעכבר – השתמשו באירוע Left Released

3. לאירוע זה הוסיפו פעולה של הגדרת משתנה ושנו בהגדרה של המשתנה במקום self ל-object ובחרו את האובייקט של הדמות שיצרתם. בשדה variable הגדירו את המשתנה image_index  ובשדה value בחרו את המספר עבור תת התמונה. במקרה שלי תמונת הבן היא 0 ותמונת הבת היא 1.

כך יראה חלון הגדרת המשתנה image_index עבור כפתור בחירה בדמות הבן:

image_index

 

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

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

כך יראה המשחק:

כרגיל, אני מצרפת את קובץ המשחק בפורמט gmk להורדה (14kb).

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

15th פבר2012

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

by יעל חקשוריאן

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

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

אוביקט המטוס

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

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

 הרצת המשחק

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

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

 

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

08th פבר2012

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

by יעל חקשוריאן
בפוסט זה מדריך ליצירת משחק מחשב פשוט בתוכנת Game Maker. המדריך כולל קטעי קוד קצרים שהוספתי באמצעות הפעולה Execute Code.
כמה פשוט יהיה המשחק? מאוד.
ניצור משחק שבו אובייקטים נכנסים מהחלק העליון של המסך וצריך לתפוס אותם או להתחמק מהם בחלק התחתון של המסך.
האובייקטים שאותם צריך לתפוס נותנים נקודות ואלו שמהם צריך להתחמק – מורידים נקודות.
במשחק הזה, האוביקט שבו נשלוט תהיה ציפור קטנה. הציפור צריכה להתחמק ממטוסים ולתפוס גוזלים.
המשחק הזה יכול להיות בסיס לכל משחק בסגנון זה ע"י שינוי הספרייטים של האובייקטים. פשוט לא? אז נתחיל בשלבים ליצירת המשחק.

יצירת דמות

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

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

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

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

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

הגדרות החדר

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

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

 

תנועת רקע החדר

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

כדי ליצור מצב בו רקע החדר נע לכיוון ההפוך של כיוון מעוף הציפור (להמחשת התנועה) נוסיף לאירוע של תנועת הציפור Key Press Right/Left קטע קוד שכולל את השורה הבאה: background_hspeed = -2 כך שהרקע יזוז שמאלה (סימן המינוס מגדיר את כיוון התנועה לשמאל) או background_hspeed = 2 לתנועה של הרקע ימינה.

באירוע Left/Right Release הוסיפו את הפקודה: background_hspeed = 0, כך הרקע יעצור בכל פעם שהציפור תעצור.

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

birdObjectPro

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

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

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

07th נוב2011

מסכה ל-sprite ב-Game Maker

by יעל חקשוריאן

את הפוסט הזה אני כותבת בתשובה לשאלתו של ניר: "איך יוצרים mask לספרייט?"

מה זה מסכה (Mask) ומתי משתמשים בה?

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

מסובך? נסביר את זה כך, נניח שיש לכם דמות שנראית כך:

simple sprite

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

בדיקת התנגשות

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

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

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

simple sprite platform

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

simple sprite platform 2

 

איך עושים את זה? באמצעות Mask.

בסרטון הבא – מדריך קצר להוספת mask ל- sprite במשחק פלטפורמה פשוט.

 

 

06th פבר2011

Time Line ב- Game maker

by יעל חקשוריאן

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

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

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

26th ינו2011

בדיקה של ביטוי ב- Game Maker

by יעל חקשוריאן

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

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

אז איך עושים את זה?

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

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

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

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

הוספת משתנה עבור הבדיקה

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

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

  1. הוסיפו אירוע יצירה לדמות הראשית
  2. הוסיפו פעולה של הגדרת משתנה checkNo. פעולת הגדרת משתנה נמצאת בלשונית control.
  3. השאירו את הערך של המשתנה על 0 (כיוון שאנחנו מתחילים לספור כאשר לדמות אין מטבעות בכלל).

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

check No Var

אירוע התנגשות עם מטבע

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

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

  1. השמדה של אוביקט המטבע
  2. הוספה של בדיקת ביטוי – Test Expression עבור המשתנה checkNo.
    הבדיקה היא עבור הביטוי: checkNo < 4 כלומר תבצע את הפעולות הבאות, כל עוד checkNo קטן מ-4:
  • הוספה של 1 למשתנה checkNo, שימו לב, יש לסמן V בשדה Relative בהוספה של 1 לערך הקיים במשתנה.
  • אחרת (כלומר כאשר checkNo גדול מ-4) – צור מופע של אוביקט מטיל זהב, ע"י הוספת הפעולה create instance וקבעו את ה-X וה-Y ל-0, כך שהמופע של אוביקט מטיל הזהב יופיע בקצה השמאלי העליון של החדר.

כך יראה חלון אפשרויות הגדלת ערך המשתנה ב-[1]:

add 1 to checkNo

וכך יראה חלון מאפייני הדמות בהתנגשות עם מטבע

test expression

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

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

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

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

28th דצמ2010

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

by יעל חקשוריאן

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

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

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

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

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

כעת ניצור שני אובייקטים:

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

platform

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

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

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

פעולות לאירוע step

1. בדיקה האם מתחת לדמות האוביקט אין כלום (פלטפורמה). אם אין פלטפורמה נוסיף לדמות פעולה של משיכה כלפי מטה, אם יש פלטפורמה, נעצור את המשיכה של הדמות כלפי מטה.
ל-game maker יש פעולה מיוחדת לבדוק אם יש מתחת לאוביקט והיא Check Empty שנמצאת בלשונית control של הפעולות.

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

check Empty

2. הוספת פעולה Set Gravity

אם אין אוביקט solid מתחת לדמות נוסיף פעולת set gravity ובשדה direction נגדיר את הכיוון כלפי מטה, כלומר 270. כיוונים מוגדרים כמו זויות במעגל נגד כיוון השעון, ולכן ימינה=0, למטה=270, שמאלה=180 ולמעלה=90.

בשדה gravity נציין ערך נמוך מ-1, בד"כ 0.5 מספיק ליצירת משיכה של הדמות כלפי מטה.

gravity

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

שוב נוסיף את פעולת Set Gravity אבל הפעם נציין בשדה gravity את הערך 0. כך נגרום לעצירה של הדמות.

התנגשות עם פלטפורמה

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

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

1. move to contact

  • בשדה direction נציין 270, כלומר כלפי מטה
  • בשדה maximum נגדיר את המהירות המקסימלית שבה האוביקט ינוע כלפי מטה, אני ציינתי 12, אבל גם 5 זו מהירות מספיקה, והערך תלוי במרחק שיש לדמות לעבור בדרך למטה.
  • והדבר האחרון – לציין את התנועה לאוביקטים שהם מסוג solid.

כך יראה חלון האפשרויות של הפעולה move to contact:

move to contact

2. Vertical Speed

הפעולה האחרונה שנוסיף לאירוע ההתנגשות היא Set Vertical Speed עם הערך 0. כך נגרום לעמוד על הפלטפורמה ולא להמשיך ליפול כלפי מטה.

תנועה של הדמות לצדדים

יש יותר מדרך אחת להזיז את הדמות ע"י מקשי החצים, אני מעדיפה את האירועים key press ו-key release

1. הוסיפו אירוע key press right והוסיפו לו את הפעולות:

  • move free קבעו את הכיוון לימין ואת המהירות ל-5
  • change sprite פעולה של שינוי הספרייט לספרייט שפונה לכיוון ימין.

2. חזרו על אותן פעולות לאירוע key press left (כמובן קבעו את הכיוון והספרייט לצד שמאל הפעם).

3. הוסיפו אירוע key release right והוסיפו לו פעולה של move free. כדי שהדמות תעצור, לחצו על הריבוע האמצעי וקבעו את המהירות ל-0.

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

stop

4. גם לאירוע key release left הוסיפו את הפעולה move free עם אותם מאפיינים כמו בסעיף 3.

קפיצה

כדי ליצור קפיצה של הדמות נוסיף אירוע keyboard ונשייך לו את הפעולה set vertical speed.

בשדה vert speed ציינו ערך שלילי (כדי שהדמות תקפוץ כלפי מעלה). קפיצה של 10 היא גבוהה מספיק.

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

platform

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

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

07th דצמ2010

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

by יעל חקשוריאן

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

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

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

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

03rd דצמ2010

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

by יעל חקשוריאן

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

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

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

  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

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

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

27th נוב2010

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

by יעל חקשוריאן

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

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

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

27th נוב2010

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

by יעל חקשוריאן

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

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

עמודים:12»