שאלה על SDL ושאלה כללית, בעיקר על SDL - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה על SDL ושאלה כללית, בעיקר על SDL


Freeze

Recommended Posts

לפני כמה זמן קראתי מדריך מעולה באתר אחר, קיבלתי השראה והתחלתי לבנות משחק ב SDL...

המשחק כבר כמעט גמור (כל הממשק גמור, נשאר רק החלק הביצועי של חוקי המשחק, אבל זה שעתיים עבודה), אבל יש לי דבר אחד שלא עובד לי בכלל.

שאלה 1: כשאני שולח את הקובץ XO.exe (שהוא נבנה מהקומפיילר שלי, Visual C++), לחברים, הוא קורס עוד לפני שחלון הדוס נפתח, עם שגיאה (לא זוכר אותה). אצלי במחשב הכל עובד טוב, אבל כשאני שולח למישהו, או אפילו שולח את זה למחשב של אחותי הקטנה, הוא לא עובד. ניסיתי לצרץ את הקובץ SDL.dll, אבל עדיין לא עובד. אפילו כשאני שם אותו ב system32. במירק אמר לי אחד באיזה ערוץ תמיכה אחד, שאצלו זה עבד בגלל שהוא עשה משהו שנקרא Static Linking ל DLL, דבר שהגדיל את קובץ ההפעלה בכמה מגה (3-4), אבל הוא משתמש ב Dev-C++, ואני משתמש ב Visual C++. השאלה שלי, איך אני עושה את זה בקומפיילר שאני משתמש בו, או אם יש פתרון אחר?

שאלה 2: וחוץ מזה, דבר שתמיד סיקרן אותי. כדי לקבל מקש מסויים (עכבר, מקלדת...), עשיתי לולאה (מדברים פה על SDL) אין-סופית שמחכה ללחיצת מקש ע"י switch-case. הבעיה העיקרית היא, שהלולאה האין-סופית הזאת, מן הסתם, לוקחת הרבה משאבים מהמעבד. במנהל משימות, 50% +-. והשאלה היא: האם יש דרך לגרום ללולאה להמשיך לעבוד באותו אופן (כמו פקודה שמחכה כמה מאיות שניה לפני שהיא ממשיכה ללולאה הבא), או דרך אחרת לחכות למקש מהלקוח?

אודה מאוד על תשובות :)

קישור לתוכן
שתף באתרים אחרים

נענה בסדר הפוך:

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

לגבי לינקוג':

בגדול אתה יכול ללנקג' את התוכנית שלך עם SDL בשתי צורות:

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

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

אני לא עובד הרבה עם DLL-ים, ועבדתי עם SDL פעם אחת לפני שנים, אבל לדעתי הדרך לבחור איזו שיטה אתה עובד היא פשוט לבחור עם איזה ספריה .lib אתה עובד. הספריה המינימליסטית שטוענת את ה -dll נקראת לפעמים stublib. אתה יכול להבדיל בין ה-stublib לבין הספריה הרגילה פשוט לפי הגודל! ה-stublib יהיה הרבה יותר קטן שכן כל הקוד נטען מ-DLL.

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

קישור לתוכן
שתף באתרים אחרים

איפה הכנסת את הספריות של DSL? באותו מקום תשנה ותחליף את שם הקובץ לגרסה הסטטית.

זה אמור להיות (בהנחה שאתה עובד עם VS) באופציות של הפרוייקט.

קישור לתוכן
שתף באתרים אחרים

אין לי ניסיון עם SDL, אבל מהתבוננות בתיעוד שלהם אם השתמשת ב- SDL_WaitEvent, לדעתי לא צריכות להיות בעיות מאחר והפונקציית מחכה עד שיהיה Event.

אני השתמשתי בעבר בספרייה חינמית אחרת, ושם זה עבד בצורה דומה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...