לדלג לתוכן

תכנות לילדים באמצעות Game Maker/פונג/גרסה להדפסה

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


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

מסלול ההתקדמות

[עריכה]

"גם מסע של אלף מילים מתחיל בצעד אחד". (טאו טה צ'ינג)

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג

צעד 1: המסך

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג

היכרות עם Game Maker

[עריכה]

כשמפעילים את Game Maker, זה מה שאמורים לראות:

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

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

שמירת משחק

[עריכה]

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

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

דבר ראשון: ליצור משהו שעובד

[עריכה]

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

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

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

אחרי שיוצרים את החדר, אפשר לראות אותו בצד שמאל של החלון, ברשימת המשאבים, בתיקיה שנקראת Rooms (רוּמְז) - חדרים. בצד ימין נפתח לנו חלון שמאפשר לקבוע מה יהיה בחדר בדיוק, אבל כרגע אנחנו עוד לא רוצים שיהיה בו כלום אז אפשר לסגור את החלון הזה או סתם להתעלם ממנו.

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


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

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

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


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

צעד 2: המחבט

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג

אובייקטים

[עריכה]

עכשיו יש לנו משחק עובד, אבל הוא די משעמם: הוא לא עושה כלום. בשביל שהוא יעשה משהו, צריך שיהיו בו דברים שעושים משהו - זזים, מתנגשים, מתפוצצים, וכן הלאה. לדבר שעושה משהו קוראים אוֹבְּיֵיקְט (עצם, חפץ) או באנגלית: object (אוֹבְּגֵ'קְט).

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

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

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

השם ש-Game Makerנתן לאובייקט החדש הוא object0. מבחינתו הרי לא משנה איך נקרא לאובייקטים שלנו - הוא לא מבין אנגלית וגם לא עברית. אבל לנו עדיף לקרוא לאובייקטים שלנו בשמות שבאמת מתאימים להם, כדי שיהיה קל לנו להסתדר גם כשיהיו לנו הרבה אובייקטים. וזה עוד יותר חשוב כשמתחילים לכתוב פקודות בשפת תכנות, אבל לזה נגיע בהמשך. בשביל לשנות את השם של האובייקט צריך לבחור את האובייקט בהקלקה, ואז להקליק על השם ולכתוב במקומו שם חדש. כדאי לקרוא לו פשוט "מחבט" באנגלית: bat (בַּט). (לא לשכוח ללחוץ אנטר אחרי שהקלדת את השם החדש!)


כדאי לדעת:

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


דמות

[עריכה]

מימין לרשימת המשאבים, נפתח לנו חלון עם הכותרת Object Properties (אוֹבְּגֵ'קְט פְּרוֹפֵּרְטִיז) - תכונות האובייקט.

התכונה הראשונה שנגדיר תהיה איך האובייקט נראה או "הדמות" שלו, ובאנגלית: sprite (סְפְּרַייט). את הדמות של האובייקט קובעים בשדה שמצד שמאל. מאחר שעוד אין לנו דמויות בין המשאבים במשחק, ניצור דמות חדשה ע"י הקלקה על New (נְיוּ) - חדש.

עכשיו נפתח עוד חלון שמאפשר לנו להגדיר דמות. הפעם לא נצייר בעצמנו דמות, אלא נפתח דמות שמישהו אחר כבר צייר. בשביל זה צריך להקליק על הכפתור Load Sprite (לוֹוּד סְפְּרַייט - טעינת דמוּת). ואז Game Maker מביא אותנו לתיקיה שבה יש כמה תיקיות עם דמויות מוכנות. יש דמויות שיתאימו לנו בתיקיה breakout, אז נכנס לשם. אפשר פשוט לעבור על התמונות שם ולראות מה נראה נחמד, אבל לדעתי כדאי לבחור ב-bat1 או bat2. אחרי שבחרת תמונה (ולחצת אנטר או Open), הדמות תוצג בחלון הגדרת הדמות. נאשר בלחיצה על OK (הכפתור עם סימן וִי ירוק) - והנה יש לנו דמות למחבט שלנו!

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

הצבת האובייקט על המסך

[עריכה]

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

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

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

להקליק על כפתור ההפעלה שבצורת משולש ירוק.

אם הכל הצליח, אמורים לראות חלון עם המחבט. הצלחת?

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


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

צעד 3: ארועים ופעולות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


אירועים

[עריכה]

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

  1. לדעת מתי המשתמש לוחץ על חץ.
  2. כשזה קורה, להזיז את המחבט.

Game Makerיודע לשים לב מה עושה המשתמש בכל רגע, והוא שולח על כך הודעות לכל האובייקטים: "שימו לב! המשתמש לחץ על חץ!" או "תראו, המשתמש הקליק בעכבר!". (הוא שם לב גם לדברים שהאובייקטים במשחק עושים ולא המשתמש - נכיר אותם בהמשך.) כל דבר כזה שקורה במשחק נקרא event (אֵוֵונְט) - ארוע. יש המון סוגים של ארועים, ורוב האובייקטים מתעלמים מרוב הארועים.

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

אז נפתח לנו מצד ימין חלון תכונות האובייקט. בחלק האמצעי שלו יש רשימה של Events (אֵוֵונְטס) - ארועים שהאובייקט מגיב עליהם. כרגע הרשימה ריקה, כי עוד לא אמרנו לאובייקט לאיזה אירועים הוא צריך להגיב. בשביל להוסיף אירוע לרשימה, צריך להקליק על הכפתור שמתחתיה Add event (אַד אֵוֵונְט) - הוסף ארוע.

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

ארוע מקש (Keyboard) מסמן שהמשתמש לוחץ על מקש. האירוע הזה קורה מרגע שהמשתמש התחיל ללחוץ על המקש, וחוזר שוב ושוב כל עוד המשתמש ממשיך ללחוץ.

ארוע לחיצה (Key Press) מסמן שהמשתמש התחיל ללחוץ על מקש. האירוע הזה קורה רק כשהמשתמש מתחיל ללחוץ על המקש, אבל לא קורה שוב עד שהמשתמש לא משחרר את המקש ולוחץ שוב.

ארוע שחרור מקש (Key Release) קורה כשהמשתמש משחרר את המקש שהוא לחץ עליו קודם.

אנחנו רוצים להגיד למחבט לזוז ברגע שהמשתמש לוחץ על חץ, ולכן נבחר באירוע מהסוג השני - האירוע שקורה רק כשהמשתמש מתחיל ללחוץ על מקש. ברגע שבוחרים בסוג האירוע הזה, צץ תפריט שבו אפשר לבחור לאיזה מקש מתייחס האירוע. נתחיל מהמקש של חץ שמאלה, ולכן נבחר Left (לֵפְט) - שמאל.

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

פעולות

[עריכה]

מימין לרשימת האירועים יש רשימה נוספת: Actions (אַקְשֵנְז) - פעולות. זו רשימת הפעולות שצריך לעשות כשהאירוע קורה. מימין לרשימת הפעולות יש כל מיני כפתורים - כל כפתור כזה מייצג פעולה, ואפשר לגרור אותו עם העכבר לרשימת הפעולות.


כדאי לדעת:

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

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

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

לוחצים על הכפתור עם חץ שמאלה כדי שהמחבט יזוז שמאלה, וכותבים 5 בשדה Speed (סְפִּיד) - מהירות.

עכשיו צריך ללחוץ OK, ואז אפשר לראות את פעולת התנועה ברשימת הפעולות.

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

ניסית? מה קרה? מה זה אומר?

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

ארועים נוספים

[עריכה]

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


עכשיו תורכם:

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

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

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

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

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


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




עכשיו תורכם:

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

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




עריכת פעולות

[עריכה]

קבענו שמהירות המחבט תהיה 5. זו מהירות נוחה לבדיקת המשחק, אבל קצת איטית כשרוצים ממש לשחק. בשביל לשנות את המהירות, צריך להגיע שוב לחלון שבו יש את האפשרויות של הפעולה. בשביל זה צריך קודם כל לבחור את האירוע המתאים (למשל, האירוע של לחיצה על חץ שמאלה) ואז לעשות הקלקה-כפולה על הפעולה שרוצים לשנות. בחלון שנפתח, משנים את המהירות ל-10 ומקליקים OK. (לא לשכוח לשנות גם את המהירות באירוע של לחיצה על החץ השני!)


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




מצאת מהירות טובה? אז אפשר להמשיך הלאה - צעד 4: הגבול

צעד 4: הגבול

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


אובייקט יציב

[עריכה]

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

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

חלון תכונות האובייקט נפתח לנו בצד ימין. דבר ראשון, ניתן לאובייקט שם שיתאר אותו. בפעם הקודמת שינינו את שם האובייקט ברשימת המשאבים, אבל הפעם נשנה אותו בחלון תכונות האובייקט: השדה שבפינה השמאלית למעלה מציין את שם האובייקט - Name (נֵיים). כרגע כתוב שם object1. את זה צריך להחליף בשם יותר משמעותי: border (בּוֹרְדֵר) - גבול. האובייקט הזה יסמן את גבול אזור המשחק וימנע מהמחבט לצאת ממנו.

מתחת לשם האובייקט יש שתי תיבות סימון, שליד הימנית מביניהן כתובה המילה Solid (סוֹלִיד) - יציב, נייח. בדרך כלל כשאומרים solid מתכוונים למשהו מוצק, אבל ב-Game Makerהכוונה היא לאובייקט יציב, שלא זז. אובייקט הגבול שלנו בהחלט צריך להיות יציב, ולכן צריך לסמן את תיבת הסימון הזאת.

כדאי לדעת:

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

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

ציור דמות

[עריכה]

בשביל לצייר את הדמות צריך להקליק על הכפתור האמצעי בחלון תכונות הדמות: Edit Sprite (אדיט סְפְּרַייט) - ערוך דמות.

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

כדאי לדעת:

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

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


כדאי לדעת:

פיקסל הוא יחידת התצוגה הקטנה ביותר על מסך המחשב: ריבוע קטן של צבע. התמונות והצורות שאנחנו רואים על המסך בנויות מרשת גדולה של פיקסלים בצבעים שונים. המילה פיקסל באה מצירוף המלים Picture Element (פִּיקְצֵ'ר אֵלֵמֵנְט) - יחידת תמונה.

בשביל לשנות את גודל התמונה צריך ללכת לתפריט Transform (טְרַנְסְפוֹרם) - לשנות. שם צריך לבחור בפקודה השלישית מלמטה: Resize Canvas (רִיסַייז קַנְוַוס) - שינוי גודל הבד (כמו בד שציירים מציירים עליו). בחלון האפשרויות שיפתח צריך לכתוב 16 במקום 32 ולאשר בלחיצה על אנטר.

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

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

התנגשות

[עריכה]

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

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

  1. לעשות הקלקה-כפולה על אובייקט המחבט ברשימת המשאבים שמשמאל, ואז נקבל מימין את חלון תכונות האובייקט של המחבט.
  2. להקליק על Add event.
  3. מבין סוגי הארועים, לבחור בארוע ההתנגשות Collision: .
  4. עכשיו צץ תפריט שמאפשר לבחור על איזו התנגשות מדובר. לבחור בהתנגשות עם אובייקט גבול, כמובן.

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

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

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

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

מופע

[עריכה]

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

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

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


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




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

צעד 5: הכדור

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


כדור

[עריכה]

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

  1. ליצור אובייקט חדש
  2. לתת לו שם משמעותי, למשל ball (בּוֹל) - כדור.
  3. ליצור לו דמות מתאימה - אפשר לצייר לבד ואפשר לטעון דמות מוכנה (יש כדורים מתאימים בין הדמויות בתיקיה breakout שבה מצאנו את דמות המחבט). דמות הכדור עגולה ולא מלבנית, אז צריך להשאיר את הסימון בתיבת הסימון Transparentשמסמנת שיש בתמונה חלקים שקופים.
  4. להוסיף את אובייקט הכדור לחדר, איפשהו באמצע.
  5. להפעיל את המשחק כדי לבדוק שהכדור מופיע כמצופה.
  6. לשמור את המשחק.

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

ארוע יצירה

[עריכה]

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

  1. להקליק על הכפתור להוספת ארוע שבחלון תכונות האובייקט של הכדור.
  2. לבחור את ארוע היצירה Create.
  3. להוסיף פעולת תנועה . כדאי שמהירות התנועה תהיה קטנה ממהירות התנועה של המחבט, כדי שהמשתמש יצליח לחבוט בכדור (למשל, מהירות 3 או 5). ובאיזה כיוון תהיה התנועה? אפשר ללחוץ על יותר מחץ אחד, ואז הכדור יבחר אחד מהכיוונים האלה באופן אקראי. ככה בכל פעם שנשחק הכדור יזוז בכיוון אחר ובלתי צפוי. כדאי לבחור את ארבעת החצים האלכסוניים - תנועה ישר היא משעממת יחסית.



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



אם הכדור באמת זז, אז הוא בורח החוצה מהמסך! צריך לעצור אותו, ולהחזיר אותו חזרה.

פעולת ניתור

[עריכה]

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

כך יראה החדר אחרי שתקיפו אותו בקירות


אז עכשיו צריך לעשות שני דברים:

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


כדאי לדעת:

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

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

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


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



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

precise (פֵּרְסַייס) - מדוייק, האם הניתור צריך לפי הצורה המדוייקת של הדמות שמתנגשים בה, או שמספיק לחשב את כיוון הניתור כאילו האובייקט התנגש בקיר ישר. הפעם לא מתאים לנו לנתר כאילו המחבט הוא ישר, כי נרצה שכשהכדור פוגע בקצוות המעוגלים של המחבט הוא ינתר בזווית שונה. לכן צריך לשנות את הערך של השדה הזה ל-precisely (פֵּרְסַייסְלִי) - בדיוק.

against (אַגֵיינְסְט) - כנגד, האם האובייקט צריך לנתר רק כנגד אובייקטים שהגדרנו אותם יציבים או כנגד כל אובייקט. המחבט שלנו הוא לא יציב, לכן צריך לשנות את הערך של השדה הזה ל-all objects (אוֹל אוֹבְּגֵ'קְטְס) - כל האובייקטים.


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



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

פעולת תנועה מדוייקת

[עריכה]

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

אז בואו נחליף את התנועה ההתחלתית של הכדור בתנועה מדוייקת:

  1. לבחור את ארוע היצירה של הכדור.
  2. למחוק מרשימת הפעולות שלו את פעולת התנועה עם החצים האדומים (פשוט לבחור אותה וללחוץ על מקש Delete).
  3. במקומה, לגרור לרשימת הפעולות את פעולת התנועה המדוייקת עם החצים הכחולים.
  4. בחלון אפשרויות הפעולה, לכתוב את המהירות כרגיל בשדה המהירות speed.
  5. מעל שדה המהירות, יש שדה direction (דַיירֵקְשֵן) - כיוון. שם אפשר להגדיר את הכיוון באמצעות מספר שמציין את הזווית במעלות ביחס לתנועה לצד ימין. כלומר, תנועה ימינה תהיה כיוון 0, תנועה למעלה תהיה כיוון 90, בשביל תנועה שמאלה צריך לכתוב בשדה הכיוון 180, ובשביל תנועה למטה - 270 (או -90). מספרים אחרים יגדירו כיווני ביניים בין הכיוונים האלה. כדאי לנסות לכתוב כאן מספרים שונים ולראות מה יוצא. (למשל: 270, או 300, או 200, או מספרים אחרים.)

הכדור ייפול בזווית שכתבת בשדה direction.




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

קביעת זווית הכדור

[עריכה]

random

[עריכה]

מה זה? למה סוגריים? אפשר לכתוב מלים במקום מספרים?
אפשר לכתוב מלים מסויימות ש-Game Maker מבין, במקום מספרים. אם נכתוב מלים שהוא לא מכיר אז תהיה שגיאה כשננסה להפעיל את המשחק (נסו ותראו!).

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

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


כדאי לדעת:

הפונקציה "random" תיתן לנו מספר אקראי מאפס עד המספר שבסוגריים, לא כולל את המספר שבסוגריים. למשל, הביטוי random(4) יכול לתת לנו את התוצאות 0, 1, 1.4, 2, 2.3 או 3, אבל לא 4.

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




ביטויים

[עריכה]

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

בשביל שהכדור יתקדם בכיוון יורד, הכיוון שלו צריך להיות גדול יותר מ-180 (שזה שמאלה) אבל קטן יותר מ-360 (שזה שוב חזרה ימינה). אנחנו גם לא רוצים שזה יהיה יותר מדי אופקי ימינה או שמאלה. הכי טוב יהיה מין נפילה אלכסונית למטה, בזווית בין 225 לבין 315.

הפונקציה random נותנת לנו מספר בין 0 לבין הפרמטר (המספר ששמים אחריה בסוגריים). אבל אנחנו צריכים מספר יותר גדול - מספר בין 225 ל-315. מה עושים?

אם נכתוב 20+random(10), נקבל 20 ועוד המספר שהפונקציה random תחזיר, שהוא יהיה בין 0 ל-10. כלומר: נקבל מספר בין 20 לבין 30.

בואו נשנה קצת את המספרים, ככה שבמקום מספר בין 10 ל-20 נקבל מספר בין 225 ל-315. קודם כל, צריך להוסיף 225 למספר האקראי שתחזיר לנו הפונקציה random, כי המספר הכי קטן שהפונקציה יכולה להחזיר הוא 0, ואנחנו רוצים שבמקרה הזה התוצאה תהיה 225. אז אנחנו צריכים 225+random(x). איזה מספר צריך לבוא במקום האיקס (x)? מספר מספיק גדול כדי שנוכל להגיע עד 315. מאיפה אנחנו צריכים להגיע ל-315? מ-225. אז אנחנו מחפשים את המספר שמוסיפים ל-225 בשביל להגיע ל-315. המספר הזה הוא ההפרש ביניהם: 90 = 225 - 315.

לכן נשנה את הכיוון של הפעולה ל-225+random(90).

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

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


עכשיו צריך לראות שזה באמת עובד.




חלופה: הפונקציה random_range

[עריכה]

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

קוראים לפונקציה הזאת random_range (רַנְדוֹם רֵיינְג'), והיא נראית ככה:

random_range(a,b)

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

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

random_range(225,315)

התוצאה תהיה כל מספר קטן מ-315, החל מ-225.

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


עכשיו צריך לוודא שוב שזה עובד.




כדאי לדעת:

הפונקציות "random" ו-"random_range" נותנות לנו מספר אקראי שאינו בהכרח שלם.

במקרה שלנו, יכול להיות שהכדור יקבל את הזוית 234.66, למשל.

אם נרצה לקבל דווקא מספר שלם, נבחר בפונקציות דומות, שנוספה בחילתן האות "i":

"irandom" ו-"irandom_range".

דוגמה: הביטוי random_range(5,8) יכול לתת את התוצאות 5, 5.5, 6, 6.8, 7.9, או כל תוצאה אחרת מ-5 ומעלה שהיא קטנה מ-8.

לעומת זאת, הביטוי irandom_range(5,8) יכול לתת רק את התוצאות 5, 6 או 7.


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

צעד 6: נפילה

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


פעולות על פעולות

[עריכה]

כשאובייקט יוצא מהמסך, Game Maker מודיע לו על הארוע הזה. אז נוסיף את הארוע הזה לאובייקט הכדור:

  1. ללחוץ על הוספת ארוע.
  2. לבחור בסוג ארוע Other (אַזֵר) - אחר .
  3. בתפריט שצץ לבחור Outside Room (אַוּוטְסַייד רוּם) - מחוץ לחדר.

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


וכרגיל, צריך לבדוק.



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

  1. להקליק על ארוע היצירה ברשימת הארועים של אובייקט הכדור.
  2. ברשימת הפעולות של הארוע מופיעה פעולת התנועה המדוייקת (חצים כחולים). לבחור אותה באמצעות הקלקה, ולהעתיק אותה בהקשה על Ctrl+C.
  3. ברשימת הארועים, להקליק על ארוע היציאה מהחדר כדי לחזור אליו.
  4. להקליק על רשימת הפעולות, ואז להדביק כאן את הפעולה שהעתקנו באמצעות הקשה על Ctrl+V.

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




צלילים

[עריכה]

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

  1. להקליק על הכפתור להוספת צליל בסרגל הכלים.
  2. לתת לצליל שם משמעותי, למשל fall_sound (פוֹל סַאוּנְד) - צליל נפילה.
  3. להקליק על הכפתור Load Sound (לוֹוּד סַאוּנְד) - טען צליל.
  4. לבחור קובץ צליל כלשהו. אפשר לבחור צלילים מהתיקיה עם הדוגמאות שמגיעות עם Game Maker, ואפשר גם צלילים אחרים שיש לכם במחשב.
  5. לשמוע את הצליל שבחרתם באמצעות הקלקה על המשולש הירוק. אם הוא לא מתאים - אפשר לטעון צליל אחר עד שמוצאים משהו מספיק טוב.
  6. להקליק OK לאישור.


כדאי לדעת:

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

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

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


שומעים?




עכשיו תורכם:

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

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

השהיה

[עריכה]

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

השדה הראשון בחלון אפשרויות הפעולה הוא milliseconds (מִילִיסֵקֵנְדְס) - אלפיות שניה. בואו ננסה לראות אם תתאים לנו השהיה של 1000 אלפיות שניה (כלומר: שניה אחת בדיוק). אז אפשר להשאיר את הערך בשדה על 1000, ולהקליק על אישור.


איך זה עובד?



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

סדר הפעולות

[עריכה]

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

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


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




עכשיו תורכם:

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

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

צעד 7: חיים וניקוד

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


חיים

[עריכה]

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

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

הפעולה שצריך לעשות בארוע הזה היא קביעת מספר החיים, שנמצאת בלשונית score (סְקוֹר) - ניקוד.

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


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



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

ערך יחסי

[עריכה]

בחלון אפשרויות הפעולה יש תיבת סימון Relative (רֵלַטִיב) - יחסי.

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

אבל אנחנו רוצים שיהיו פחות חיים, לא יותר! לכן נכתוב -1 ונסמן Relative - ככה מספר החיים יהיה מה שהיה קודם ועוד -1, כלומר: מה שהיה קודם פחות 1.


עדיין לא רואים שום דבר מעניין. למה? כי החיים פשוט יורדים להם בשקט מ-3 ל-2, מ-2 ל-1, מ-1 ל-0, מ-0 ל--1, וכן הלאה. לא תכנתנו את המשחק לעשות שום דבר כשיש 0 חיים.




סוף החיים

[עריכה]

כשיש 0 חיים, Game Maker מודיע לנו על הארוע הזה. הארוע נקרא No more lives (נוֹ מוֹר לַייוְוז - אין עוד חיים) ונמצא גם הוא בסוג ארוע Other .

הפעולה שצריך לעשות בארוע הזה היא לסיים את המשחק: . היא נמצאת בלשונית main2.


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



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

הצגת מספר החיים

[עריכה]

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

לפעולה הזו יש הרבה אפשרויות, אז נעבור עליהן אחת-אחת:

  • show score (שוֹוּ סְקוֹר) - הצג הניקוד. עוד אין לנו ניקוד, אז נשנה את האפשרות הזו ל-don't show (דוֹנְט שוֹוּ) - אל תציג.
  • score caption (סְקוֹר קַפְּשֵן) - כותרת הניקוד (המלים שיוצגו ליד הניקוד).
  • show lives (שוֹוּ לַייוְוז) - הצג חיים. זה בדיוק מה שאנחנו רוצים לעשות, אז נשנה את האפשרות הזו ל-show - הצג.
  • lives caption (לַייוְוז קַפְּשֵן) - כותרת החיים (המלים שיוצגו ליד מספר החיים). אפשר להשאיר את הכותרת באנגלית, ואפשר לכתוב במקומה "חיים: " או "כדורים: ". שימו לב שצריך להיות רווח בסוף הכותרת שכותבים, אחרת מספר החיים יהיה צמוד לכותרת!
  • show health (שוֹוּ הֵלְתְ') - הצג בריאות. לא נתעסק בזה עכשיו.
  • health caption (הֵלְתְ' קַפְּשֵן) - כותרת הבריאות.

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




ניקוד

[עריכה]

עכשיו תורכם:

ראינו ש-Game Maker יכול להראות לנו גם את הניקוד לצד החיים. בואו ננצל את זה!
  1. לשנות את פעולת קביעת כותרת החלון כך שתציג גם ניקוד.
  2. בתחילת המשחק, לקבוע את הניקוד ל-0 באמצעות הפעולה לקביעת ניקוד.
  3. להגדיל את הניקוד בכל פעם שהשחקן מצליח לפגוע בכדור עם המחבט. (רמז: זוכרים את Relative?)

עכשיו המשתמשים יכולים לדעת כמה הם טובים במשחק!




רשימת האלופים

[עריכה]

Game Maker יודע לזכור מי זכה בניקוד הכי גבוה ולהציג טבלה עם עשרת הטובים ביותר. את הטבלה הזאת נציג למשתמש בסוף המשחק - בארוע No more lives (אין עוד חיים) . אפשר למצוא את הפעולה להצגת הטבלה בלשונית score. לא לשכוח לדאוג שפעולת הצגת הטבלה תתבצע לפני הפעולה לסגירת המשחק!


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




עכשיו תורכם:

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

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


עכשיו אפשר לשחק שוב ושוב ושוב ושוב...




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

צעד 8: מהירות

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג

שינוי משתנים

[עריכה]

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

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

עד עכשיו קבענו ערכים למשתנים באמצעות פעולות מיוחדות כמו הפעולה לקביעת הניקוד, או הפעולה לקביעת הכיוון והמהירות. אבל יש גם פעולה כללית שמאפשרת לנו לשנות כל משתנה שנרצה: קביעת ערך של משתנה. VAR זה קיצור של המלה variable (וַוארְיַאבֵּל) - משתנה. הפעולה לקביעת ערך של משתנה נמצאת בלשונית control (קוֹנְטְרוֹל) - בקרה.

המשתנה שאנחנו רוצים לשנות הוא מהירות הכדור, והשם שלו הוא speed.

כדאי לדעת:

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

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

  • variable - שם המשתנה. במקרה שלנו זה speed.
  • value - הערך שרוצים לתת למשתנה. אנחנו רוצים להגדיל את המשתנה, לכן נכתוב כאן 1 או 2 ונסמן את תיבת הסימון Relative, כדי שהמספר הזה יתווסף למהירות הנוכחית.



נסו לשחק עכשיו. יותר קשה? מספיק קשה? יותר מדי קשה? נסו לשנות את המספר שמוסיפים למהירות הכדור בכל חבטה עד שרמת האתגר שהמשחק מציב תהיה לא גבוהה מדי ולא נמוכה מדי. המספר לא חייב להיות שלם - אפשר לכתוב גם 0.3 או 2.5 וכו'.



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

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

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


כדאי לדעת:

כמו ש-Game Maker ידע להבין שכשכותבים לו פונקציה כמו (random(360 הוא צריך להפוך את זה למספר שהפונקציה מחזירה, ככה הוא גם יודע שכשכותבים לו שם של משתנה הוא צריך להציב במקומו את הערך של המשתנה. אפשר גם לכתוב ביטויים עם שמות משתנים, כמו למשל speed-1 או speed/2, וככה לכוונן טוב יותר את רמת האתגר של המשחק.

יותר טוב, לא?



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

משתנים חדשים

[עריכה]

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

דרוש לנו משתנה חדש: המהירות של המחבט כאשר המשתמש לוחץ על חץ. אין משתנה מוכן כזה ב-Game Maker, לכן נצטרך ליצור משתנה כזה בעצמנו:

  1. נלך לחלון תכונות האובייקט של המחבט באמצעות הקלקה כפולה על אובייקט המחבט ברשימת המשאבים שמשמאל. למה למחבט ולא לכדור? כי זה משתנה של המחבט - אנחנו משתמשים בו בשביל לקבוע את מהירות המחבט, לא את מהירות הכדור.
  2. נוסיף למחבט ארוע יצירה, כי אנחנו רוצים לקבוע את המהירות שבה המחבט יוכל לנוע מיד כשהוא נוצר - לפני שהמשתמש מספיק ללחוץ על החצים.
  3. נגרור לרשימת הפעולות של הארוע את הפעולה לקביעת ערך של משתנה.
  4. בשדה variable נכתוב שם משמעותי למשתנה, למשל move_speed (מוּבְ סְפִּיד) - מהירות תנועה.
  5. בשדה value נכתוב את המהירות שבה המחבט יזוז כשהמשתמש ילחץ על חץ. (אצלי זה 10, אבל אולי אתם מעדיפים מהירות אחרת.)
  6. נאשר בהקלקה על OK.

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


עכשיו תורכם:

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

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




כדאי לדעת:

בפיתוח תוכנה הרבה פעמים עושים שינויים כאלה, שלא משפיעים על הפעולה הנראית של התוכנה אלא רק על מה שקורה מאחורי הקלעים. שינויים כאלה נועדו לאפשר הוספת יכולות חדשות לתוכנה (כמו השינוי שעשינו כאן), החלפת חלקים איטיים ברכיבים מהירים יותר, או פשוט סידור נוח יותר להבנה ולתכנות של תוכנה גדולה ומסובכת. באנגלית, שינוי מסוג כזה נקרא refactoring (רִיפַקְטוֹרִינְג) - סידור מחדש.

עכשיו נוכל לשנות את מהירות התנועה של המחבט באמצעות קביעת ערך המשתנה move_speed אחרי כל חבטה. בשביל זה צריך

  1. להוסיף למחבט טיפול בארוע התנגשות עם הכדור.
  2. לרשימת הפעולות של הארוע הזה להוסיף פעולה של קביעת ערך משתנה.
  3. באפשרויות הפעולה, להגדיל את המשתנה move_speed (בעזרת Relative).

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



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

תוכנית מחשב עצמאית

[עריכה]

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

  1. ללכת לתפריט File (פַייל) - קובץ.
  2. לבחור Create Executable (קְרִיאֵייט אֵקְסֵקְיוּטַבְּל) - הכן תוכנית.
  3. לבחור איפה לשמור את התוכנית שלכם.

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


כדאי לדעת:

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

אפשר גם לדחוס את המשחק ואז לשלוח:

  • על ידי מערכת "חלונות": ללחוץ על הקובץ בלחיצת עכבר ימנית, ולבחור "שלח אל" > "תיקייה מכווצת"

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

  • 7-zip
  • WinZip
  • WinRar
  • WinAce

השלמת את המשחק הראשון! עכשיו לעצור ולראות לאן הגענו - צעד 9: סוף המסלול.

צעד 9: סוף המסלול

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג


סיכום

[עריכה]

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

יסודות Game Maker

[עריכה]

גרפיקה

[עריכה]

מושגים בתכנות

[עריכה]

עקרונות בפיתוח תוכנה

[עריכה]

ארועים

[עריכה]

פעולות

[עריכה]

פונקציות

[עריכה]

משתנים

[עריכה]

ומה עכשיו?

[עריכה]

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

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


תרגילים

[עריכה]

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

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

בשביל להשתמש בתמונות שמופיעות כאן (או באתרים אחרים) צריך להקליק על התמונה בכפתור הימני של העכבר, ומהתפריט שצץ לבחור "שמור תמונה בשם" או "Save Picture As". ואז צריך לבחור איפה על המחשב שלך לשמור את התמונה. כדאי לשמור אותה בתיקיית הדמויות של Game Maker, שנמצאת בדרך כלל בתיקייה C:\Program Files\GameMaker\Sprites.


אתגר:

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

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

אתגר:

ליצור משחק "חוצים כביש": על הכביש נעות מכוניות במהירויות שונות. כל מכונית שמגיעה לסוף המסך מיד מופיעה שוב במקום בו התחילה וממשיכה לנסוע משם. השחקן עומד לצד הכביש ויכול לנוע עם החצים לכל הכיוונים: Left, Right, Up, Down. הוא צריך לנווט בין המכוניות ולהגיע לתחנה שנמצאת מהצד השני של הכביש. כשהוא מצליח, הוא מקבל נקודות. בפעם הבאה הוא יצטרך לעבור שוב אבל הפעם המכוניות ינועו מהר יותר.

הנה כמה תמונות של כלי רכב שאפשר להשתמש בהן:

אפשר למצוא צלילים למשחקים באתרים רבים, למשל:


המשך הדרך

[עריכה]

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

יש כמה דברים שיוכלו לעזור לכם בנסיונות לגלות דברים בעצמכם:

  1. תוכנת תרגום טובה. Game Maker מציג הסבר על כל פעולה כאשר מצביעים עליה בעכבר לכמה שניות, ואם מבינים את ההסברים האלה אפשר לגלות באיזה פעולות להשתמש בשביל לעשות דברים חדשים. תוכנת תרגום מומלצת במיוחד (גם למי שכבר יודע אנגלית טוב) היא בבילון - היא מתרגמת מלים שאתם מקליקים עליהן, ואפשר להוסיף לה מילונים שונים בתחומים רבים, כולל מילונים של מונחי תוכנה, אנציקלופדיות, ועוד.
  2. העזרה של Game Maker, שאליה אפשר להגיע מתפריט Help או בהקשה על F1. כאן אמנם צריך לקרוא יותר אנגלית מאשר בתיאורי הפעולות, אבל מצד שני ההסברים יותר מפורטים, ומכסים גם דברים נוספים ולא רק פעולות.
  3. משחקים שאנשים אחרים הכינו ב-Game Maker. אפשר ללמוד המון מלראות איך אנשים אחרים עשו דברים. למשל, אם אתם רוצים לדעת איך להציג פיצוץ, אפשר לחפש משחק של מישהו אחר שיש בו פיצוצים ולראות איזה פעולות מבצע המשחק ההוא בשביל להציג פיצוץ. אפשר להוריד משחקים כאלה באתרים רבים, ביניהם http://www.gamemaker.nl/games_edit6.html או http://users.tpg.com.au/billkerr/g/d6.htm

חזרה לתוכן הספר

צעד 10: תוספת למתקדמים

נמצאה תבנית הקוראת לעצמה: תבנית:גמייקר/פונג

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


הזזת המחבט באמצעות העכבר

[עריכה]

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

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

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

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


כדאי לדעת:

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


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

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

בשביל לשנות את הערך של המשתנה x צריך להוסיף פעולה , שנמצאת בלשונית control: .

בשלב זה יש למלא את הדף בהתאם




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




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

וכעת להסבר.

x+(mouse_x-x)/5

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

mouse_x-x - הוא המרחק בין מקום שהעכבר נמצא לבין המקום שהמחבט נימצא.

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



הרץ ובדוק.




פונקציה חדשה לקביעת הכיוון – choose

[עריכה]

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

במקום 225+random(90) או random_range(225,315) שכתבנו בתור כיוון לכדור כל פעם שהוא מתחיל את התנועה, נכתוב את השורה הבאה:

choose(277,265,310,315,240,250,230)

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


הרץ ובדוק.




שינוי גודל החדר

[עריכה]

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

  1. לכו לחלון תכונות החדר.
  2. עברו ללשונית settings.
  3. שנו את הערך שכתוב בשדה Width ל-960.
  4. שנו את הערך שכתוב בשדה Height ל-720.

עכשיו תורכם:

אחרי שינוי גודל החדר, יהיה צריך להתאים כמה רכיבים במשחק לגודלו החדש:
  1. הציבו את גבולות החדר מחדש.
  2. אם לא העברתם את השליטה לעכבר, יהיה כדאי להעלות את מהירות המחבט, כדי שהוא יוכל להגיע בזמן מצד לצד של החדר.
  3. ייתכן גם שתרצו להחליף את הדמות (Sprite) של המחבט לדמות רחבה יותר.

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




מצב מסך מלא

[עריכה]

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

  1. הגדירו מאורע שיקרה בלחיצה על כפתור הרווח ( - space).
  2. הוסיפו את הפעולה "set fullscreen" (קבע מצב מסך מלא):
  3. ניתן לקבוע שלושה מצבים לפעולה הזאת (ראו תמונה): הראשון, switch, יחליף כל פעם למצב אחר - פעם לתצוגת חלון, ופעם לתצוגת מסך מלא, והאחרים קובעים מצב מסויים - שהמשחק יוצג במסך מלא או בחלון. נבחר באפשרות הראשונה.

הרץ ובדוק.




רקע ומוזיקת רקע

[עריכה]

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

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


הרץ ובדוק.




ומה עכשיו?

[עריכה]

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

אם סיימתם לעשות זאת, אתם מוזמנים להמשיך למשחק הבא: פק-מן.