SDL.NET (VB/C#): ماذا يجب أن يكون كائن بدء التشغيل ونوع التطبيق؟

StackOverflow https://stackoverflow.com/questions/1364592

سؤال

في النهاية ، لم أتمكن من الحصول على أي شيء آخر مع برنامجي بسبب أوجه القصور المختلفة لـ VB.NET (دعم الصوت السيئ ، ولا توجد أحداث قراءة في منتصف التنفيذ ، ومدخلات لوحة المفاتيح ضعيفة للغاية ، إلخ). لذلك حاولت sdl.net 6.1.
على الرغم من وثائقها الفظيعة ، تمكنت من إصلاح الكود الخاص بي لاستخدامه وأحبه!

ولكن هناك مشكلة. لا أعرف كيفية إعداد إعدادات التطبيق الخاصة بي. من المؤكد أن كائن بدء التشغيل يجب أن يكون فئة (الأمثلة دائمًا في الفصول ، وحدات أبدًا) ، ولكن يجب أن تكون فئة بدء التشغيل على وجه التحديد نموذجًا! هذا أمر سيء لأن SDL تصنع نافذة خاصة به عبر setVideomode ؛ أنت لا تحتاج إلى نموذج. لذلك عندما ينتهي مُنشئ النموذج الجديد () ، يتم إنشاء نموذج عديم الفائدة ولديك نوافذ.

حاولت إجراء مكالمة إلى حلقة محرك اللعبة داخل New () بحيث تبدأ اللعبة دون الانتهاء من جديد (). تعمل اللعبة بشكل طبيعي ، وهذا يحل مشكلة "النافذة الثانية" ... لكن لا يمكن إغلاقها! لا يفعل الزر x شيئًا ، يتم استدعاء الأحداث.

أنا متعثر. يبدو أنني بحاجة إلى ضبط فئة غير شكل ككائن بدء التشغيل ، لكن ذلك لن يسمح لي بذلك.

أوه ، بالمناسبة ، يبدو أن هناك شيئين يسمى "SDL Net". للتوضيح ، أنا أستخدم هذا, ، وهو موجود في sdldotnet مساحة الاسم.

أوه ، لقد نسيت أن أذكر ، لاحظت أيضًا أن الكثير من الأمثلة لديها خط يقول [Stathread]. هل هذا مهم؟

تعديل: لقد تلقيت بالفعل وقبلت إجابة لسؤالي ، لكنني أريد أن أخبر الآخرين عن المشكلة في الخروج/إغلاق التطبيق ، على الرغم من أن هذا لم يكن سؤالي:
بينما تتيح لك SDL.NET تلقي الإدخال وتشغيل أحداث أخرى دون الحاجة إلى إيقاف تشغيل المنطق ، لا يزال التطبيق لا يمكن الإقلاع عنه أثناء تشغيل المنطق. لذلك أجد أن أفضل طريقة لإخبار تطبيق SDL.NET الخاص بك للاستقالة في منتصف المنطق هو استخدام السطرين التاليين:

SdlDotNet.Core.Events.QuitApplication
End

ضعها في معالج لحدث sdldotnet.core.events.quit ، وكذلك في أي مكان آخر تريد أن يستقيل البرنامج الخاص بك.

هل كانت مفيدة؟

المحلول

من المؤكد أن كائن بدء التشغيل يجب أن يكون فئة (الأمثلة دائمًا في الفصول الدراسية ، لا توجد وحدات أبدًا)

ها هو خطأك. لا يوجد فرق حقيقي بين الفصل ووحدة VB من منظور CLR. لذلك فقط اجعلها وحدة مع Main وتستمر. ليست هناك حاجة لفصل. أظن أنك تنظر إلى أمثلة C# ، والتي تستخدم الفصول - ولكن هذا لأنه لا يوجد شيء مثل الوحدة النمطية في C#.

[STAThread] ربما لن تحدث أي فرق لـ SDL. من المهم لتطبيقات واجهة المستخدم (يتطلب كل من WinForms و WPF) ، لكنني لا أعتقد أن SDL تقوم بأي مكالمات com ، لذلك لا ينبغي أن تهتم ما إذا كان موضوعك هو ستا أم لا. إنه مجرد شيء يضعه Visual Studio Main في مشاريع جديدة بشكل افتراضي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top