Einführung
Vor ein paar Jahren hatte ich die Idee, eine
Visual Novel-Engine auf WinForms zu schreiben. Warum auf WinForms? Denn dann wusste ich nicht wirklich wie. In regelmäßigen Abständen hat der Motor Aktualisierungen bis zum heutigen Tag erhalten und erhält diese. In dieser Zeit hat sich ein wenig nützlicher Code angesammelt, der überall verwendet werden kann.
Text in Zeilen aufteilen
Sprites und PictureBox
Wie Sie wissen, verfügt
PictureBox über zwei Bildebenen. Hintergrundbild & Bild. In den ersten Versionen der Engine habe ich ungefähr 5 Boxen verwendet, um Sprites zu zeichnen. Ein solches System hatte mehrere große Nachteile:
- Probleme mit der Transparenz aufgrund der mehrstufigen Vererbung
- Legen Sie beim Aktualisieren Formulare an
Später habe ich den Algorithmus über Grafik erstellt, sodass es möglich wurde, Sprites so oft zu zeichnen, wie Sie möchten.
PictureBox ALeft; Bitmap SpriteListPic;
LuaInterface und Try-Catch-ähnliche Funktion
Ein wenig über die Erfahrung mit LuaInterface:
- Ergänzung zu einem Artikel über LuaInterface über LuaTable: In den meisten Fällen können Sie auf Funktionen verzichten, indem Sie nur Tabellen verwenden.
lua.NewTable("Scene");
- Probleme mit Speicherlecks bei der Arbeit mit Tabellen
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];
Jedes Mal, wenn Sie GetTable aufrufen , erhalten Sie ein neues CLR-Objekt, das auf die Lua-Tabelle verweist, auf die diese globale Lua-Variable verweist.
- Wenn Sie sich nicht sicher sind, welchen Wert die Tabelle überhaupt hat:
try { Size = TableReaderI("Scene", "Image" + Convert.ToString(num) + "Scale"); } catch (Exception ex) { Size = 2; }
Lua gibt einen Wert zurück, aber nicht die Tatsache, dass es sich um eine Zahl handelt. Deshalb fangen (Ausnahme) . Die Option mit double.TryParse ist hier nicht geeignet, weil lua.GetTable gibt keine Zeichenfolge zurück, sondern einen bestimmten Typ, der LuaTable ist und in eine Zeichenfolge konvertiert werden kann, wenn ihm ein solcher Wert zugewiesen wurde, auch mit einer Nummer.