עיצוב שלבים בפלאש

Brusi

New member
עיצוב שלבים בפלאש

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

De-Panther

New member
הממ... אקסמל זה סה"כ פורמט של טקסט. פשוט יותר

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

Brusi

New member
אני מבין...

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

חפש actionscript 3 עם XML וקרוב לודאי שתסתדר משם. אני אישית למדתי את זה מטוטוריאל של lynda.com
 

erezor

New member
בפלאש יש מחלקות מובנות שמטפלות ב-XML

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

freak2100

New member
איך משחקים מורכבים,

נניח RPG-ים, שומרים את העולם + מצב העולם? הם יודעים איזה משימות עשית, מה הדמות שלך עשתה וכן הלאה... או משחקי פלטפורמה שבהם אתה יכול לחזור אחורה ולראות איזה אוייבים הרגת וכן הלאה? אתה צריך לחשוב על מבנה נתונים הגיוני. אתה יכול לחלק את העולם ל"תבליט" ו"תכסית" (כן, יצא לי לנווט קצת לאחרונה, כמו שאתה יודע). התבליט זה הבסיס שעליו יושב העולם, ואולי אותו שווה לייצג במערך סטטי. התכסית זה למשל אוייבים במשחק פלטפורמה, או אפילו הפלטפורמות עצמן. את זה אולי שווה לייצג ברשימה מסוג כזה או אחר (אולי skip list כלשהו שיאפשר לפנות לאיברים בקלות על פי מיקום, או אפילו מבנה נתונים יותר מבוסס גיאומטריה, נניח עץ שמחולק לפי מימדים שונים). באופן כללי צריך: 1. לקחת בחשבון כמה "פריטים" יש לך לייצג ואיך הכי כדאי לייצג אותם 2. לזכור שהמשאבים של המחשב היום הם עצומים. צריך להתאים את עצמך לפלטפורמה ולמגבלות. למשל, מערך בגודל 100 על 100 של מספרים (integers) תופס בערך 300 קילובייטס, זה לא הרבה אם יש לך במחשב ממוצע 2 גי'גה ראם, אבל אני לא יודע למשל כמה ראם יש בטלפונים היום (על אף שאני מניח שהם לא נופלים מזה, לפחות לא בהרבה). או למשל ברוחב פס, הייתי מגביל את עצמי יותר אם זה לאפליקצייה מאשר אם זה למחשב (רוחב הפס ומגבלת התעבורה מאוד שונים בין מחשב לטלפון היום). וכמובן שלמשל לפלטפורמות משחקים, שם יש אפילו עוד יותר משאבים מבחינת RAM וכו'. אז זה הכל תלוי.
 

Brusi

New member
אז אתה אומר שאני בעצם יכול

לקחת את כל המידע שלי, ולאכסן אותו בסטראקטים מתאימים למשל: סטראקט של מערך של שלבים -> סטראקט של שלב -> סטראקט של התכסית---> מטריצה של המרחב מערך של חפצים---> סטראקט של סוג החפץ, עם תכונות שלו וכו'... אז אתה אומר שאני יכול לקחת את כל המידע הזה ובעצם לטעון אותם לזיכרון בהפעלה של התוכנית לתוך משתנה סטטי, ואז פשוט לקרוא לו במקום הנכון? זה מה שאני עושה נכון לעכשיו. מבחינת זיכרון ומשאבים, לדבריך זה לא רע. נגיד יש לי סטראקט של עץ, אז יש קוד שרץ בתחילת התוכנית בו כתוב:
var my_tree:Tree = new Tree(100, new Point(54,32));​
ויש לי בעצם המון כאלה. האם יש לי אפשרות יותר נוחה לראות את המידע ולערוך אותו? למשל אם יש לי רמה עם 100 עצים מסודרים בשורה, אני לא צריך שורה לכל עץ... נכון לעכשיו אני עובד עם Editor שמייצא לי קוד כמו שכתוב לעיל. הוא גם יודע לקרוא את הקוד הזה - לא כעיבוד מחרוזת, אלא בצורה הבאה: אני מקמפל את העורך ביחד עם הקובץ שמכיל את כל הסטראקטים האלה, ואז הוא ממש קורא את הקוד ויוצר בעצמו New Tree במקום הנכון. ושוב, לשאלה - האם יש דרך נוחה, או מקובלת, לצפות במידע ולערוך אותו בצורה שגם תהיה נוחה וגם תיכנס ל-SWF בקימפול הסופי? הכי טוב יהיה משהו שאפשר לשמור בקובץ באמצעות עורך כלשהו ולטעון אותו משם, גם בלי לקמפל את העורך מחדש. ובסוף גם שייכנס ל-SWF...
 

freak2100

New member
אתה יכול ליצור פורמט כקובץ

זה מה שעושים בדרך כלל. תחשוב על מחרוזת, או בינארי כלשהו שייצגו לך את העולם. XML זו דרך אחת, סטנדרטית משהו, שמאפשרת לך לעשות את זה. XML שמייצג עולם יראה משהו כזה:
<world> <fixed width="3" height="4"> <square> <type>3</type> </square> <square> <type>1</type> </square> .... </fixed> <dynamic> <object id="badguy1"> <type>3</type> <hp>120</hp> <color>red</color> <position> <x>123</x> <y>321</y> </position> <name>Bad Benny</name> </object> ... </dynamic> </world>​
באותה מידה אתה יכול: 1. ליצור מבנה טקסטואלי 2. ליצור מבנה בינארי (כזה שבו במקום char-ים אתה שומר דברים ישר ב-int-ים וכו') בסופו של דבר אתה יוצר פורמט, ואתה יוצר parser שקורא אותו. אתה עובד עם קבצים, ואחרי זה יש לך שתי אפשרויות: 1. להמשיך לעבוד עם קבצים (למשל קבצים שישבו על השרת, והמשחק שלך יטען) 2. להעתיק את תוכן הקבצים לתוך הקוד שלך ופשוט לפרסר אותם בזמן ריצה
 
למעלה