תכנות לילדים באמצעות Game Maker/חייזרים/צעד 5: יצירת חייזרים


אובייקט ניהולעריכה

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

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

 

עכשיו אפשר לתכנת את מנהל החייזרים ליצור חייזרים. נתחיל בארוע היצירה שלו   - נוסיף לארוע הזה את הפעולה ליצירת מופע שנמצאת בלשונית main1:  .

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

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


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




יצירת חייזרים נוספיםעריכה

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


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




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

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

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


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




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


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



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


יש חללית, יש חייזרים, עכשיו אפשר לתת להם להלחם זה בזה - צעד 6: פיצוצים