תכנות לילדים באמצעות Game Maker/משחק מרובה משתתפים/הבנת המשחק
שים לב כי אנו קובעים אמן משתנה גלובלי אמיתי. הסיבה לכך היא במשחק אנחנו רוצים לעשות הבחנה בין השחקן הראשי (שנקרא הראשי) ואת השחקן השני (המכונה עבדים). אמן יהיה אחראי ביותר לשחק את המשחק בזמן העבד פשוט בעקבותיו.
הבחירה השניה היא להצטרף למשחק קיים. הנה הקוד נראה כדלקמן. (אם (mplay_session_find ()> 0) (אם (mplay_session_join (0 ,)) (global.master = false; room_goto_next ();) אחר show_message ("נכשל להצטרף לפגישה.")) אחר show_message ("לא הפגישה זמינים להצטרף. "))
אז במשחק הזה אנחנו פשוט להצטרף הפגישה הראשונה זמין. כי אנחנו עולה כי מספר מקסימלי של שחקנים היא 2, אין שחקן אחר יכול להצטרף להפעלה יותר.
התמודדות עם שחקנים
פעם הורים יצר הפגישה, אנחנו צריכים לחכות לשחקן אחר להצטרף. ישנם שלושה שגרות כי העסקה עם השחקנים.
mplay_player_find () מחפש כל השחקנים בפגישה הנוכחית מחזירה את מספר השחקנים נמצא.
mplay_player_name (קהה) מחזירה את השם של השחקן מספר קהה (0 הוא השחקן הראשון, אשר תמיד את עצמך). בשגרה זה יכול להיות רק בשם אחר קורא את השגרה הקודמת.
mplay_player_id (קהה) מחזירה את המזהה הייחודי של המספר שחקן קהה (0 הוא השחקן הראשון, אשר תמיד את עצמך). בשגרה זה יכול להיות רק בשם אחר קורא את שגרת הראשון. מזהה זה משמש שליחה וקבלה של הודעות וממנה שחקנים בודדים.
בחדר השלישי שלנו, אנחנו פשוט מחכים לשחקן השני להצטרף. אז אנחנו שמים חפץ כלשהו שם במקרה צעד שאנחנו שמים: (אם (mplay_player_find ()> 1) room_goto_next ();)
(אנחנו לא באמת צריך ללכת לחדר זה עבד.)
6
סנכרון פעולות
עכשיו הקמנו את הקשר, נוצר מפגש, ויש להם שני שחקנים זה, המשחק האמיתי יכול להתחיל. אבל זה גם אומר כי חשיבה אמיתית על התקשורת חייב להתחיל. הבעיה העיקרית בכל משחק מרובי היא הסנכרון. איך אפשר לוודא ששני השחקנים רואים בדיוק את אותה תמונה של המשחק בעולם? זה חיוני. כאשר שחקן אחד רואה את הכדור במשחק שלנו במקום אחר מאשר השחקן השני, דברים מוזרים יכולים לקרות. (במקרה הגרוע ביותר, עבור שחקן אחד הכדור פגע במחבט בעוד עבור השחקן השני הוא החטיא את הכדור.) המשחקים בקלות לצאת סינכרון, אשר יוצר מהומה ברוב המשחקים.
מה יותר גרוע, אנחנו צריכים לעשות את זה עם כמות מוגבלת של התקשורת. אם אתה למשל משחק באמצעות מודם, חיבורים יכול להיות איטי. אז אתה רוצה להגביל את כמות התקשורת ככל האפשר. כמו כן ייתכן שיש עיכובים כאשר הנתונים מגיע מהצד השני. לבסוף, יש גם את האפשרות כי נתוני הולך לאיבוד ולא מגיע בצד השני.
איך הכי טוב להתמודד עם כל הבעיות הללו תלוי בסוג של משחק שאתה יוצר. במשחקים המבוססים על תורות אתה כנראה להשתמש במנגנון שונה מאשר במשחקי פעולה במהירות גבוהה.
Game Maker מציע שני מנגנוני תקשורת: הנתונים המשותפים הודעות. נתונים משותפים הוא מנגנון הקלה ביותר לשימוש. שליחת הודעות היא מגוונת יותר, אך דורש כי אתה מבין טוב יותר כיצד פועלת התקשורת.
שיתופיים תקשורת נתונים
תקשורת שיתופיים הנתונים היא כנראה הדרך הקלה ביותר כדי לסנכרן את המשחק. כל תקשורת היא מוגנת מפני שאתה. יש קבוצה של 1000000 הערכים המשותפים לכל הגופים של המשחק (כך למשל הן האדון לשפחה). ישות כל יכולה להגדיר ערכים ולקרוא ערכים. Game Maker מוודאת כי כל גוף רואה את אותם ערכים. הערך יכול להיות אמיתי או מחרוזת. יש רק שתי שגרות:
mplay_data_write (ind, ואל) לכתוב ואל ערך (מחרוזת או אמיתי) לתוך ind מיקום (ind בין 0 1000000).
mplay_data_read (ind) מחזירה את הערך ind מיקום (ind בין 0 1000000). בתחילה כל הערכים הם 0.
כדי להשתמש במנגנון זה אתה צריך לקבוע איזה ערך משמש מה, ואת מי הוא רשאי לשנות את זה. עדיף, רק מופע אחד של המשחק צריך לכתוב את הערך. כמו כן רצוי להשתמש אך ורק במקומות הראשונים כדי לחסוך בזיכרון.
במקרה שלנו ישנם 4 ערכים חשובים: ה-y עמדת המחבט של האדון, ה-y עמדת המחבט העבדים, ו-x ו-y של מיקום הכדור. אז אנו משתמשים מיקום 1 כדי לציין את y-לתאם של המחבט של הורים, מיקום 2 כדי להצביע על y-לתאם של המחבט העבדים, וכו 'ברור כי האדון כותב את הערכים של המחבט שלו העבד כותב את הערכים של המחבט עבדים. אנו מחליטים כי הורים