עזרה בפרוייקט משחק פלטפורמה - כיצד לייעל?
לאחר מספר חודשים שלא הייתי פה (צבא, חברה, וכשלון בפרוייקטים שניסיתי להכין, שהוציאו לי את החשק :] ), החלטתי לחזור לעסק ולהתחיל בבניית מעין משחק פלטפורמה מהיר.
ניסיתי בעבר ליצור מספר ממשקים ומנועי משחק פשוטים למשחק פלטפורמה, אבל תמיד הייתי מסתבך עם כמות Layers, פונקציות, ו-MC בשביל דמות אחת, שהייתי משתגע וזונח את הכל.
כך לדוגמה:
- הייתי משקיע מבחינה גרפית בדמות הראשית של השחקן, ומחלק את ה-MC שלו למספר Layers, כאשר כל אחת מכילה חלק אחר בגוף (שכבה לראש, שכבה ללסת, שכבה לכל אחד מהגפיים, שכבה לחלק עליון של הגוף, שכבה לחלק תחתון של הגוף וכדומה).
- לאחר שיצרתי את כל אחד מחלקי הגוף, הייתי מנפיש אותם בהתאם לתנועות של הגוף. בתוך ה-MC הראשי, הייתי מגדיר למשל, שמפריים 1 עד 10, זו ריצה, מפריים 11 עד פריים 15, זו קפיצה, מפריים 15 עד פריים 25, זו התקפה. כמובן שב-AS הייתי מגדיר שברגע שה-Timeline מגיע לסוף הפריים של האנימציה, הוא חוזר לאנימציית ה-Idel (עמידה) או עושה Loop של האנימציה (בהתאם לאנימציה...).
- בהגדרות ל-AS, הייתי משתמש בפונקציות. כך למשל: פונקציות שהייתה בודקת האםKeyIsPressed - הפונקציות היו מגדירות את מיקום ה-MC של הדמות, משנות את האנימציה בתוכו לאנימציה של התנועה, והייתה חוזרת על עצמה כל עוד המקש לחוץ. כל הפונקציות האלו, אילצו אותי להסתבך במלא פונקציות אחרות (מה קורה אם קופצים במהלך ריצה, איזה תנועות אסור לבצע במהלך תנועות אחרות וכדומה), כך שהסתבכתי במיליון פונקציות.
בסופו של דבר, התוצאה הייתה MC אחד כבד, שבתוכו 100 פריימים המחולקים לכ-10 תנועות שונות, וקוד מפוצץ רק ל-MC הבודד הזה... התוצאה = דינמיות ויעילות אפסית. בסופו של דבר נטשתי את הפרוייקטים מ-"סוג" זה...
דוגמה לפרוייקט שננטש, בו הדמות הראשית היא Zergling מהיקום של StarCraft:-
לצערי, קובץ ה-FLA של המשחק נמחק מהמחשב שלי (שכחתי לגבות אותו, טעות מפגרת...) וכל ההשקעה על הדמות הלכה. היה פוטנציאל לדעתי, אבל החובבניות שלי ב-AS די הרסה אותו...
בכל מקרה, חזרה לי המוטיבציה, והמשחק שלי מתמקד עכשיו בדמות מהירה וקטנה, אשר לאורך רוב המשחק תהיה בתנועה מתמדת (ומאוד מהירה). רוב המשחק יתמקד בקפיצות ושימוש ביכולות מיוחדות בזמן שהדמות רצה מהר - שאיפה להרבה אקשן, שזה מה שחסר בהרבה משחקי פלטפורמה העשויים ב-Flash בפרט ובמשחקי פלטפורמה בכלל.
המטרה שלי היא לבנות את הדמות מכמה אנימציות פשוטות: ריצה, "ריצה מיוחדת" (מגבירה את המהירות פלאים כל עוד השחקן לוחץ על כפתור מסויים), עמידה (Idle), קפיצה, קפיצה בתנועה.
המכניקה של הרקע לא אמורה להיות מסובכת גם כן. מהירות הנפילה והקפיצה של הדמות צריכות להיות מושפעות מכוחות פיזיקה (נפילה חופשית, נוסחה די פשוטה). כמו כן, מהירות הדמות איננה קבועה, אלא מושפעת מיכולות מיוחדות וממשך הזמן אשר השחקן לוחץ על כפתור התנועה (תאוצה...), כך שגם האנימציה צריכה להיות מושפעת ממהירות הדמות (הרגליים יזוזו יותר מהר, מה שתמיד התקשיתי לבצע, כי התקבעתי לאנימציה קבועה של תנועת הרגליים, ואני לא מכיר שום אפשרות לשנות את ה-FrameRate של MC כלשהו בזמן הרצת סרטון).
הדמות צריכה להיות מושפעת גם מ-HitTest בסיסי (רצפה, קירות במהלך התנועה וכו').
כמו כן, יהיו מספר יכולות מיוחדות (אנימציות על גבי הדמות), אשר ישנו את הפיזיקה של הסביבה,
של הדמות, ושל דמויות אחרות מסביבו.
הסביבה של הדמות, צריכה לנוע בהתאם למהירות הדמות. אני שואף לבנות מספר שכבות של התפאורה אשר ינועו במקביל לתנועת הדמות, וכן ע"פ פרספקטיבה (תפאורה "קרובה" תנוע בהתאם למהירות הדמות) ותפאורה "מרוחקת" תנוע יותר לאט).
-----------------------------
מה שבעצם אני מבקש, זה לא כתיבת המנוע שאני מבקש לעיל, אלא עצה בכיצד לבנות אותו, בדרך שונה ממה שהשתמשתי עד כה. אולי ב-Classes (שההבנה שלי בהן מאוד מאוד מאוד בסיסית), או אולי מישהו יציג מנוע למשחק פלטפורמה מבוסס פיזיקה אשר כבר מוכן (ועל פיו אבנה את המודל שלי).
אשמח לעזרה,
תודה מראש.
נערך לאחרונה ע"י Darakan בתאריך 23-07-2005 בשעה 12:08.
|