שלום, שאלה לגבי DX

MegaMango

New member
שלום, שאלה לגבי DX

מתכנת אנוכי משחק פלטפורמה בC++ תוך שימוש בDX (הידד למונופול של מייקרוסופט) וממש עכשיו שמתי לב שאני לא מסוגל להטעין תמונות מעל גודל מסויים. הבעיה במשחק היא שהמפות לא בנויות כאוסף של אוביקטים אבל כתמונה אחת ענקית שאין בה חזרות של משטחים. מובן שיהיו אוביקטים כמו יצורים, אויבים ועננים אבלאני עדיין זקוק לתמונה אחת גדולה. ניסיתי עד עכשיו פשוט להטעין את כל התמונה ומעבר לכך שבצורה זאת אני לא יכול לעשות מסך loading (רק מסך שחור ומציק P:) אני לא מצליח להטעין תמונות שהגודל שלהן גדול מ- 3200X1200 פיקסלים. חשבתי לחלק את התמונה הענקית לכמה תמונות, מעין tiles , ולהצמיד אותן בזמן המשחק. כל tile יהיה בגודל של הרזולוציה , 800X600. עדיף אולי לעשות שהגודל יהיה ריבוע במימדים שהם חזקה של 2? כלומר, זה משמעותי בזמן ההרצה? ועוד משהו שמדאיג אותי..ראיתי במייפל סטורי שבתמונת הרקע עשו tiles שכאלה (אם כי קטנים הרבה יותר). הבעיה הייתה ששם ראו לפעמים רווחים בין הריבועים, כאילו שלא הצליחו להצמיד אותם בדיוק. הבעיה הזאת תופיע גם אצלי?
 

gil03

New member
תגובה

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

MegaMango

New member
Oo

הו לא..זה לא משחק אסטרטגיה או RPG. זה משחק פלטפורמה. המשטחים לא חוזרים על עצמם בכלל . 10 על 10 פיקסלים זה מזערי! למה שהמחשב יצטרך להצמיד xresulution/10 על yresulution/10 תמונות בכל פריים? גודל כל שלב אמור להיות 1600*20 על 2400 פיקסלים. העליתי תמונה מהמשחק megaman x , זה בערך הסגנון שאני שואף אליו.
 

refish

New member
יש אפשרות...

יש אפשרות לייצר תמונה בגודל המבוקש לדוגמא 30000X5000 ,אתה לא טוען אותו למשטח sureface אתה טוען את החלק שרץ frame או rect בגודל רזולצית המשחק 320x200. הקובץ הגדול נמצא בדיסק ועת תזוזת המסך )frame( נלקח מהקובץ הגדול אל המשטח. זה עובד כמו זיכרון וירטואלי. צירפתי דוגמא מקווה שזה יעזור:)
 

De-Panther

New member
כדאי לו לקחת קצת...|זבנג|../images/Emo23.gif../images/Emo185.gif

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

MegaMango

New member
עשיתי משהו דומה. הטענתי

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

De-Panther

New member
אתה מטעין חלק אחד..|זבנג|../images/Emo23.gif../images/Emo185.gif

ומאפס חלק אחר או שאתה כל הזמן מזיז את החלקים לפי מה שאתה צריך... בכלמקרה... אם אתה רוצה לטעון את כל הטקסטורה מראש על חלק אחד הנה משהו שאתה יכול לעשות: http://web3d.vapourtech.com/workshop/floor בעמוד הזה יש דוגמה לאיך עושים דבר דומה למה שאתה רוצה בVRML תסתכל על הסקריפט שיש שם... זה יכול לתת לך כמה רעיונות
 
למעלה