Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Die Frage die sich mir in letzter Zeit stellt ist, wenn man ein Spiel entwickelt was sollte dyn. gelöst sein und was hardcoded.
für mich wäre z.B. das Menu ein teil der dynamisch aus einer datei geladen werden sollte
aber was andere Teile eines Spiels angeht bin ich unsicher was sich loht(für die dyn inhalte ist es ja meistens ratsam einen Editor zu)
gibt es da soetwas wie eine allgemeine Regel oder ist das ganze stark von der eigentlichen Spielidee abhängig zu betrachten
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich kann dir nicht sagen wie man es macht, aber ich kann dir sagen, wie ich es geplant habe.
Das Strategy Game soll ja möglichst flexibel werden. Das heißt, dass ich nur diverse interne Spiellogik parts, die entweder oft oder halt in jedem Spielmodus gebraucht werden, hardcode. Die GUI beispielsweise lade ich schon jetzt aus XML dateien, das heißt, sie wird dynamisch erzeugt.
Ich habe meine Klassen für jeden Objekttyp (Einheiten, Gebäude usw.), wobei die abhängig von den Daten in den XML-Files andere Werte bekommen. Spezialfähigkeiten, die nicht in der Grundversion vorgesehen sind, werden über Scripts realisiert.
Was Hardcoded wird, sind so dinge wie Schadenszuteilung, viele dinge, die jeden Tick durchgeführt werden (weil es sonst mit der Performance auch kritisch wird; wobei das bei mir dank Rundenbasierung nicht so extrem wird, bei mir wird aus "jeder Tick" "jede Runde") wie zum Beispiel das berechnen von Produktion und Bewegungen von Einheiten oder sowas. Würde man das über Scripts regeln wäre das ab einer gewissen Anzahl abhängig von der gewählten Sprache sicherlich inperformant.
Generell halte ich es so: Alles, was nicht dynamisch geregelt werden muss, wird auch hardgecodet. Jedes Script und jede dynamik verbraucht Ressourcen, also so viel wie nötig und so wenig wie möglich. TAK wird dir zu dem Thema sicherlich auch was sagen können, speziell was Scripts betrifft.
Du musst auch bedenken (hast du ja auch selber schon vermutet), dass man dir nicht unbedingt detailliert helfen kann, wenn man nicht weiss, worum es überhaupt genau geht. Ich hoffe aber, ich kann dir trotzdem ein wenig weiterhelfen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Also es hängt ein wenig von der Größe deines Projektes ab. Ich habe die Erfahrung gemacht das man so viel wie möglich dynamisch machen sollte. Bei einem großen Projekt ist es zum Beispiel unglaublich praktisch wenn du mitten im Spiel eine Taste drücken kannst die dir alle oder einige bestimmte Shader, Texturen, Skripte, usw. neu lädt während das Spiel ganz normal weiter läuft.
Allerdings ist der Aufwand für ein gutes Ressourcen-System groß, du solltest also gut überlegen ob du sowas brauchst.
Wenn du Level-Daten aus einem XML-File lädst und du das geschickt implementierst, sollte da nur beim Laden ein Performanceunterschied sein. Z.B. Referenzen (auf Texturen, Shader, usw.) kannst du da direkt in Pointer bzw. OpenGL-ID-Nummern übersetzen. Zur Laufzeit besteht dann kein Unterschied mehr zwischen dynamisch und hardcodiert.
Wenn du Skripte benutzt solltest du natürlich aufwendige Berechnungen wie z.B. Wegfindung natürlich nativ implementieren. Also deine Skript-Engine sollte es erlauben native Funktionen deiner Engine aufzurufen. Außerdem solltest du deine Skripte zumindest vorkompilieren, also eine sowas wie Assembler-artigen Byte-Code produzieren, so dass du die Skripte zur Laufzeit nicht auch noch parsen musst.
Ich würde es auch nach dem eigenen Können richten. Wenn du bisher wenig/gar keine Erfahrung mit XML hast und nur wenig Menüs hast (z.B. nur Haupt- und Pausenmenü und vielleicht ein Optionsmenü - vielleicht nicht gerade ein Strategiespiel), dann kannst du das auch Hardcoden. Warum auch nicht? Mach ich genauso in solchen Fällen. Du kannst auch je nach Einsatzfeld die Art der Dynamik variieren lassen. Z.B. ob du so eine Art "bytecode"-Skript hast, etwas Pascalähnliches oder XML. Bytecode lässt sich meist besser und schneller auslesen.
In einem Projekt von mir z.B. will ich eine Art "Script-Assembler" nutzen. Für meine Zwecke voll ausreichend in dem Moment und sehr flexibel.
In diesem Projekt kann ich auch dynamisch Dll's (Windows) oder so's (Linux) nachladen. Geschwindigkeit ist hier natürlich optimal und auch die Flexibialität.
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
vielen Dank das hat mir erstmal weitergeholfen... ich werd jetzt erstmal ein bisschen weiter entwickeln und wenn sich dann nochmal ein Problem ergiebt werd ich die Frage speziefisieren ...
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Solange deine Variablen, in Klassen, über setter und getter zu bekommen sind, wirst du eher weniger hardcoded/softceded Problematik betrachten brauchen.
Sollte eine Variable dynamisch sein, dann kannst du einfach setter und getter an eine io hängen, egal ob config file, logik code oder Eingabe Gerät.
Ich selber mach mir über sowas keine gedanken, denn sobald die Anforderung für dynamisch oder statische Einstellung da ist wählt man eines von beiden.
Eigentlich sollte alles Dynamisch sein, damit man die nötige flexibilität hat.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.