خلفية
قبل بضع سنوات ، توصلت إلى فكرة كتابة
محرك Visual Novel على WinForms. لماذا على WinForms؟ لأنني لم أكن أعرف حقًا كيف. بشكل دوري ، تلقى المحرك ويتلقى تحديثات حتى يومنا هذا. خلال هذا الوقت ، تراكمت بعض الرموز المفيدة التي يمكن استخدامها في كل مكان.
تقسيم النص إلى خطوط
العفاريت و PictureBox
كما تعلمون ، يحتوي
PictureBox على طبقتين من الصور. BackgroundImage والصورة. في الإصدارات الأولى من المحرك ، استخدمت حوالي 5 صناديق لرسم العفاريت. كان لهذا النظام العديد من العيوب الكبيرة:
- مشاكل مع الشفافية بسبب الميراث متعدد المستويات
- وضع النماذج عند التحديث
في وقت لاحق ، قمت بإجراء الخوارزمية من خلال الرسومات ، لذلك أصبح من الممكن رسم العفاريت بقدر ما تريد في أي مكان.
PictureBox ALeft; Bitmap SpriteListPic;
LuaInterface ومحاولة مثل ميزة الصيد
قليلا عن تجربة LuaInterface:
- ملحق لمقال عن LuaInterface حول LuaTable: بالنسبة لمعظم الأشياء ، يمكنك الاستغناء عن الوظائف باستخدام الجداول فقط.
lua.NewTable("Scene");
- مشاكل في تسرب الذاكرة عند العمل مع الجداول
string TableReaderS(string Table, string Key) { string Ret = ""; using (LuaTable tabx = lua.GetTable(Table)) { Ret = (string)tabx[Key]; } return Ret; } int TableReaderI(string Table, string Key) { int Ret = -1; using (LuaTable tabx = lua.GetTable(Table)) { Ret = (int)(double)tabx[Key];
في كل مرة تتصل بـ GetTable ، تحصل على كائن CLR جديد يشير إلى جدول Lua المشار إليه بواسطة متغير Lua العام.
- إذا لم تكن متأكدًا من القيمة الموجودة في الجدول:
try { Size = TableReaderI("Scene", "Image" + Convert.ToString(num) + "Scale"); } catch (Exception ex) { Size = 2; }
لوا سيعود قيمة ، ولكن ليس حقيقة أنه سيكون رقما. لذلك قبض (استثناء) . الخيار مع double.TryParse غير مناسب هنا ، لأن لا يُرجع lua.GetTable سلسلة ، لكن نوعًا معينًا ، وهو LuaTable ويمكن تحويله إلى سلسلة إذا تم تعيين مثل هذه القيمة ، أيضًا برقم.