Frage zum Codedesign
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
PokoyoBetreff: Frage zum Codedesign |
Sa, Okt 21, 2017 21:51 Antworten mit Zitat |
|
---|---|---|
Schönen Abend Allerseits,
ich hätte da mal eine Fräge. Bin ja noch ziemlicher BMax Neuling und noch nicht so fit mit all den Möglichkeiten. Programmiere nun schon seit einigen Wochen an einem Sidescroller in dem man einen Heli steuert. Nun bin ich an dem Punkt angelangt wo man doch bequem mal ein Level erstellen können müsste. Bisher sind die Gegner immer zufällig gespawnt. Da in meinem Programm Alles zerstörbar ist (auch Vegetation, Gebäude, Straßen etc.), gibt es natürlich Unmengen von Objekten in so einem Level. Unmengen von Objekten bedeutet natürlich auch Unmengen von Kollisionsabfragen und Objekt-Updates. Ich habe mich dann dafür entschieden meine Levels in Landschaftsabschnitte (a 512px in der Breite) zu unterteilen und dann nur die Objekte in den Sichtbaren +-1 Abschnitten zu berechnen, soweit so gut. Nun sind die Landschaftstiles selbst Objekte welche über eine TList verfügen in der die aktuell auf ihm befindlichen Objekte gespeichert sind. Das heißt, eine Liste für ganz unterschiedliche Objekte als da wären : Gegner-Fahrzeuge, Flugobjekte, Vegetation, Gebäude, Straßen, Schüsse bzw. Raketen. Aber auch Objekte des Spielers. Der Player selbst, Bomben, Raketen, Projektile. Das System ist nun so aufgebaut Dass es einen Basistypen(entity) gibt von dem Alle erben. In diesem Basistypen ist die Pseudomethode .update enthalten die in den abgeleiteten types jeweils überladen wird. Das Globale Update sieht also wie folgt aus : BlitzMax: [AUSKLAPPEN]
Da seht Ihr nun dass alle Objekte in nur einer Liste gehalten werden, nämlich in der vom Basistypen TEntity. Nun kommen die Fragen: Nun werden alle Objekte der Reihenfolge nach, wie sie in der Liste stehen, geupdatet. Das ist aber schlecht weil eine Zeichenreihenfolge eingehalten werden muss. Sonst überlappen die Grafiken sich unterschiedlich. Mal vor einem objekt gezeichnet, mal dahinter. Jetzt war mein Gedanke in den Landschaftsabschnitten für jeden typen eine eigene schleife zu durchlaufen. Das hätte dann aber zufolge das Eachin jedes Mal die ganze Liste durchgeht um sich die paar Objekte des types da rauszusuchen, was bei mehreren 100 Objekten denk ich mal doch ziemlich viel Zeit beanspruchen würde. Wie würdet Ihr das lösen ? Oder ist mein Ansatz gänzlich falsch ? Bin für jeden Tipp dankbar Gruß Poko |
||
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax| |
XeresModerator |
Sa, Okt 21, 2017 22:10 Antworten mit Zitat |
|
---|---|---|
Hast du Zeit, eine kleine visuelle Hilfe zu machen?
Ein Screenshot mit farbigen boxen um die Objekte, die in einer Liste sind, z.B. Von dem was ich verstehe glaube ich, du machst dass schon ziemlich richtig so. Mein Hinweis wäre nur: Das gleiche Objekt kann sich durchaus in mehreren Listen befinden. Das erhöht vielleicht die Komplexität, aber bringt dir mehr Geschwindigkeit. Wenn du Logik und Anzeige trennst, iterierst du vielleicht über manche Objekte doppelt, kannst aber insgesamt an langsamen Operationen sparen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mathias-Kwiatkowski |
Sa, Okt 21, 2017 22:24 Antworten mit Zitat |
|
---|---|---|
genau das mache ich auch, das eine jeweilige objekt kannst du in verschiedenen listen unterbringen somit hat Xeres vollkommen recht. und dann kannst du anstelle deiner "kompletten" liste immer stück für stück die kleineren listen durchblättern, stellst du nun ein pbjekt auf null so sollte es meines wissen in allen listen null sein, also jede veränderung ist gleich, wenn du das anders möchtest müsstest du das objekt "klonen". | ||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
Pokoyo |
Sa, Okt 21, 2017 23:06 Antworten mit Zitat |
|
---|---|---|
hmmm. Mehrere Listen zu verwenden klingt sehr gut. Man könnte ja innerhalb der Lanschaftstiles(Cluster) für jeden Objekttypen eine eigene Liste erstellen. Die könnte man dann Alle nacheinander durchgehen und somit Einfluss auf die Zeichenreihenfolge nehmen.
Danke für den Tipp Ich habe das ganze mal schnell auf den Server geschaufelt : Heli-Game Kurze Erklärung: InGame : WASD steuerung Heli wobei gezoomt wird wenn man nach oben fliegt. Maustaste 3 Gegner anvisieren Maustaste 2 Bombe werfen Maustaste 1 Bordkanone Wenn Ziel anvisiert Rakete feuern mit Space EditorModus : rechte Maustaste Objekt aus dem Pool auswählen linke Maustaste Objekt setzen mittlere Maustaste Objekt auswählen entf Taste Objekt entfernen WASD Durchs Level fahren bzw. Zoomen. Oben Links sind n paar Buttons wo man die Modi umschalten kann. Das Ganze ist natürlich noch Baustelle Extrem Benutzung auf Eigene Gefahr... Vielen dank für Eure Denkanstöße. @Matthias, bist du sicher dass ein Objekt automatisch aus Allen Listen gelöscht wird wenn man es NULLt ? Ich dachte der GarbageClollector entfernt es erst wirklich aus dem Speicher wenn sämtliche Verweise sprich Links auf das Objekt entfernt wurden ? Gruß Poko |
||
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax| |
XeresModerator |
Sa, Okt 21, 2017 23:16 Antworten mit Zitat |
|
---|---|---|
Zitat: Ich dachte der GarbageClollector entfernt es erst wirklich aus dem Speicher wenn sämtliche Verweise sprich Links auf das Objekt entfernt wurden ? Genau so ist es... Eine Referenz mit Null zu überschreiben tut nichts mit den übrigen Referenzen.
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group