תכנות לילדים באמצעות Game Maker/a first person shooter/צעד 1: בניית המשחק הדו-מימדי

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

הכנה לדרך[עריכה]



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

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




כדאי לשמור את המשחק בשם A First Person Shooter.




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



ספרייטים

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


רשימת הדמויות
  • השחקן - (הדמות: ) ניקרא לדמות spr_player
  • קיר אופקי-(הדמות: ) ניקרא לדמות spr_wall1_hor
  • קיר אנוכי-(הדמות: ) ניקרא לדמות spr_wall1_vert


ממה מתחילים?

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

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


אובייקט השחקן


אז בואו ניצור את אובייקט השחקן. בשביל זה צריך:

1. להוסיף אובייקט חדש.

2. לשנות את שמו ל-obj_player.

3. להשתמש בדמות spr_player שיצרנו.

4. להוסיף לחדר שיצרנו קודם את אובייקט השחקן.



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




תנועה באמצעות החצים[עריכה]

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

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

ניצור אירוע החץ למעלה ונוסיף קטע קוד ונרשום:

{
  if (speed < 2) speed = min(2,speed+0.4);
}

הסבר: אם המהירות קטנה מ- 2 כל צעד או שיתווסף למהירות 0.4 או שהיא תהפוף לשתיים. ככה למעשה ניצור העלאה של המהירות בהדרגה עד 2.

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

{
  if (speed > -2) speed = max(-2,speed-0.4);
}



השחקן הולך קדימה ואחורה אך לא עוצר.




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

{
  friction = 0.2;
}


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



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




סיבוב השחקן

כפי שלמדנו התנועה של השחקן נשלטת ע"י שני משתנים - speed (מהירות) ו- direction (כיוון). כלומר כדי לשנות את הכיוון אליו השחקן הולך נצטרך לשנות את המשתנה direction. לכן ניצור אירוע לחיצה על החץ השמאלי ונוסיף קטע קוד ובו נרשום:

{
  direction += 3;
}



השחקן מסתובב שמאלה אך לא ימינה.





עכשיו תורכם:

לתכנת שהשחקן יסתובב גם ימינה




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




סיבוב הדמות

יוצרים אירוע סיום צעד (end step) ובו מוסיפים את פעולת המרת הגוף. ורושמים כך:

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

קירות[עריכה]

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

עכשיו, צריך:

  • ליצור אוביייקט קיר ללא דמות שנקרא לו obj_wall_basic.
  • ליצור אובייקט קיר אופקי עם הדמות spr_wall1_hor שנקרא לו obj_wall1_hor ובירושה לסמן את obj_wall_basic.
  • ליצור אובייקט קיר אנוכי עם הדמות spr_wall1_vert שנקרא לו obj_wall1_vert ובירושה לסמן את obj_wall_basic.
  • לסמן את כל הקירות ב soild.
  • להוסיף קיר לחדר.




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




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

{
  speed = 0;
}


הסבר: פעולה זו הופכת את מהירות השחקן ל0 והשחקן לא זז לתוך הקיר.




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

עכשיו תורכם:

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



עכשיו הגיע הזמן להפוך את המשחק לתלת-מימדי: צעד 2: שינוי המשחק לתלת-מימדי