... so, ich setze mal die Reihe der "Die Sache mit dem ..."- Threads fort.
Ich habe vor, in meiner Karte das Prinzip von Fog of War zu implementieren.
Ich verwende einen 9x9 Felder großen Ausschnitt auf einer Iso- Map.
Bevor Ich mich rangesetzt habe, es zu programmieren, habe ich mir folgende Gedanken über einen Algorithmus gemacht:
Während Ich jedes Feld einzeln in PHP durchlaufe, checke Ich einfach, wie weit das nächste Gebäude/ Einheit von diesem Feld entfernt ist. Ich schau mir also jeden Eintrag des 81- Elemente langen Arrays an, und nehme das Feld her, welches am nächsten zu dem gerade durchlaufenen Feld liegt (Luftlinie). Anschließend überprüfe Ich, welchen Radius dieses Gebäude/ Einheit besitzt, sprich: wie weit es "gucken" kann. Als letzten Schritt überprüfe Ich, ob das derzeit durchlaufene Feld von dem Gebäude/ Einheit "gesehen" werden kann - fertig.
Das dachte ich zumindest
Im Prinzip funktioniert der Algorithmus ja auch, ist sogar performant, doch hat er ein Problem, wenn sich die "Einzugsbereiche" zweier Gebäude/ Einheiten überlappen.
Deshalb wollte ich mal fragen, wie ihr das macht.
Die Sache mit dem Fog of War
gepostet vor 18 Jahre von Skyrunner
gepostet vor 18 Jahre von Drezil
ich bau mir in php nen sicht-array.
ich hab ein weltraum-szenario mit planeten und einem (folglich) runden aufklärungsbeireich.
ich erstelle mir einen array aller punkte, die "sehen" könnten.
x|y|radius, sortiert nach radius.
dazu generiere ich mir noch einen "großen kasten", der die weitesten radien tangiert. alles, was nicht drin int, kann schonmal ausgeschlossen werden (und braucht beim datenholen auch gar nicht erst aus der db zu kommen).
nun wird jeder punkt geprüft, ob er in einem kasten liegt. die wahrscheinlichkeit, dass er im 1. liegt ist am größten (weils der größte kreis ist), etc.
läuft für meine zwecke performant.
für dich würde ich dieselbe technik nehmen (spezielle "sichtgebäude" wie türme/radar wird es bei dir sicher auch geben). Darüberhinaus würde ich noch alle gebäude in (angeforderten kartenausschnitt+max-gebReichweite) prüfen, da jedes geb ja auch einen "sicht"radius hat, so aber der 1. array sehr klein gehalten wird.
ich hab ein weltraum-szenario mit planeten und einem (folglich) runden aufklärungsbeireich.
ich erstelle mir einen array aller punkte, die "sehen" könnten.
x|y|radius, sortiert nach radius.
dazu generiere ich mir noch einen "großen kasten", der die weitesten radien tangiert. alles, was nicht drin int, kann schonmal ausgeschlossen werden (und braucht beim datenholen auch gar nicht erst aus der db zu kommen).
nun wird jeder punkt geprüft, ob er in einem kasten liegt. die wahrscheinlichkeit, dass er im 1. liegt ist am größten (weils der größte kreis ist), etc.
läuft für meine zwecke performant.
für dich würde ich dieselbe technik nehmen (spezielle "sichtgebäude" wie türme/radar wird es bei dir sicher auch geben). Darüberhinaus würde ich noch alle gebäude in (angeforderten kartenausschnitt+max-gebReichweite) prüfen, da jedes geb ja auch einen "sicht"radius hat, so aber der 1. array sehr klein gehalten wird.
gepostet vor 18 Jahre von Skyrunner
Danke für die Antwort!
Habe meinen fehler gefunden, es lag daran, dass ich immer nur die Sichtweite vom nächsten Punkt (array[0]) aus geprüft habe
So gehts mir immer, 95% fertig, dann stockts *gg*
Christoph
Habe meinen fehler gefunden, es lag daran, dass ich immer nur die Sichtweite vom nächsten Punkt (array[0]) aus geprüft habe
So gehts mir immer, 95% fertig, dann stockts *gg*
Christoph
gepostet vor 18 Jahre von faint
macht doch auch ohne probleme sonst keinen spass