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

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

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



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

Gmaker add room.png

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




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




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



ספרייטים

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



ממה מתחילים?

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

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


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


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

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

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

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

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



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




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

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

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

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

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

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

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

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



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




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

{
  friction = 0.2;
}


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



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




סיבוב השחקן

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

{
  direction += 3;
}



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





עכשיו תורכם:

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




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




סיבוב הדמות

Transform Sprite.jpg

יוצרים אירוע סיום צעד (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.
  • להוסיף קיר לחדר.




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




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

{
  speed = 0;
}


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




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

עכשיו תורכם:

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



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