06th דצמ2012

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

change instance

 

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

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

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

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

alarm

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

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

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

11th נוב2012

פעולות ואירועים – Game Maker

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

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

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

event actions

מה הוא אירוע?

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

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

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

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

הוספת אירוע מתבצעת ע"י לחיצה על Add Event בחלון המאפיינים של אובייקט:

add event

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

events

 

פעולה

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

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

כאשר דמות יוצאת מצד אחד של החדר ונכנסת מצדו השני – מתבצעת פעולה של הקפת החדר (wrap screen)  לאחר אירוע יציאה מהחדר  (outside room).

הוספה של פעולה מתבצעת ע"י גרירה של הפעולה מאחת הלשוניות לחלון הפעולות:

actions

סוגי פעולות

הפעולות נחלקות ל-7 קבוצות:
Move actions: פעולות תנועה
Main actions, set 1: יצירה, שינוי והריסה של מופעים של אובייקט, צלילים, חדרים
Main actions, set 2: תזמון, מתן הודעות למשתמש, פעולות על המשחק עצמו: התחלה, סיום, טעינה ושמירה של המשחק.
Control actions: פעולות בקרה שליטה ובקרה על פעולות.
Score actions: פעולות ניקוד (הניקוד, החיים, ובריאותו של השחקן).
Extra actions: קיים רק בגרסת pro edition וכולל פעולות לביצוע על חלקיקים (particles) פעולות ל-CD ולסמן העכבר.
Drawing actions: פעולות ציור (שינוי ספרייט, רקע, כתיבת טקסט).

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

תרגיל יצירה של אובייקט ופעולה

רוצים לתרגל אירועים ופעולות? הנה תרגיל קצר ביצירה של אובייקט, ספרייט, אירוע ופעולה.

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

שלבים בתרגול:

צרו קובץ משחק חדש (ריק מתוכן)

צרו Sprite של סמיילי (או אחר) ותנו שם לSprite, למשל smile

צרו סאונד חדש, ע"י העלה של קובץ beep. תנו שם לסאונד: Beep

צרו אובייקט חדש והגדירו עבורו את Sprite smile. תנו לאובייקט שם: smile_object

הוסיפו לאובייקט אירוע לחיצת עכבר (Left Released)

הוסיפו פעולה לאירוע לחיצת עכבר: Play Sound ובחרו בסאונד beep.

שמרו את השינויים שביצעתם בחלון Object Properties.

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

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

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

 

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

 הרצת המשחק

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

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

 

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

24th מרץ2011

חדרים ב-Game Maker

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

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

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

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

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

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. הריצו את המשחק.

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

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 הכולל את כל השלבים להורדה.

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

22nd נוב2010

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

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

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

05th נוב2010

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

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

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

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

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