(Umsetzung) Scheinwerfer

Network

Top Contributor
Hallo,

=> Ich habe ein kleines Spiel programmiert mit folgenden Daten die vieleicht wichtig währen:
- Man sieht das Spielfeld von der Seite (siehe SuperMario)
- Man bewegt Einheiten durch ein Tunnelsystem
- Das Spielfeld ist in viele gleichgroße einzelne Quadrate eingeteilt, also ein Quadrat hat entweder die Einstellung "IstGefüllt"(nicht begehbar) oder "IstNichtGefüllt"(begehbar).
- Man spielt rundenbasiert

=> Da das Spiel im Untergrund stattfindet muss natürlich alles dunkel sein. Am besten noch Taschenlampen(/Scheinwerfer) für die eigene Einheit, damit mehr Stimmung und Realismus ins Spiel kommt

<<<< Problem >>>>
Ich weiss nicht wie ich die Scheinwerfer umsetzen soll.
Das beginnt bereits bei der Zeichnung und endet damit, wie ich diese auf das Spielfeld projeziere (Scheinwerfer sollen ja nicht durch die Wand scheinen)

<<<< Meine Versuche >>>>
Als erstes hab ich mir mit einer eingebauten Funktion in einem Grafikprogramm, Scheinwerferbilder zeichnen lassen.
Wobei schon das erste Problem auftritt: Ich möchte mein Spiel möglichst Moddingfähig für andere Spieler/Programmierer machen. Ein festes Scheinwerferlicht ist zu unflexibel.

Außerdem scheint ein festes Scheinwerferlicht immer durch Wände hindurch. Das kann man zwar durch "IstGefüllt"-Abfrage verhindern - Befindet sich der Protagonist jedoch auf halber Höhe (Also nicht direkt auf einem Quadrat sondern auf einem Übergang zwischen 2) so kann eine Hälfte des Lichtes durch die Hälfte der Wand scheinen.

Deshalb scheitert es bei der Umsetzung ein Scheinwerferlicht zu "malen", das:
1. Realistisch aussieht (Bzw. dass man erkennt, es solle sich um ein Scheinwerferlicht handeln und nicht um irgendwas Gelb/Weisses)
2. Sich an die Umgebung anpasst

Ich habe oft in Spielen Scheinwerferlichter gesehen, bei den meisten sind es starre langweilige Bilder, die einfach über den Bildschirm mitgezogen werden, bei anderen sind sie unflexibel, bzw. einmal gezeichnet und dann nie wieder und bei wieder anderen wirken sie auch auf Hindernisse.

Leider weiss ich nicht wie ich sowas umsetzen kann, ohne dass durch aufwenige Rechen und Abrageprozeduren mein Spiel anfängt zu hängen.

Vieleicht hat ja jmd. eine Idee oder kennt ein Tutorial was dieses Problem behandelt. Habe bereits eine Menge geggogelt und gesucht aber leider nichts gefunden.


Vielen Dank
Gruß TMI
 

Marco13

Top Contributor
Wenn ich das richtig vertanden habe, wirst du um ziemlich aufwändige Licht/Schattenberechnungen nicht drumrumkommen, da wäre irgendein "Bild" ohnehin der falsche Ansatz (und vermutlich auch das kleinste Problem). Soll das mit reinem Java2D gemacht werden? ???:L
 

thewulf00

Bekanntes Mitglied
Ich denke auch, dass das aufwendig werden wird - bei Deinen Anforderungen. Du musst wohl in jedem Frame ausgehend vom Scheinwerfer in Richtung des Lichts die Pixel einzeln aufhellen, es sei denn Du triffst auf eine Wand.
 

Empire Phoenix

Top Contributor
Hm ohne Shader wird das ziemlich schwer, mit shader immernoch schwer das performant zu lösen. Letztendlich läuft es auf eine art raytracing für das light raus denke ich.
 

Network

Top Contributor
Wow ja das letzte ist ja mal was... Trotz der vielen rumzeichnerei läuft es vollkommen flüssig und dazu auch noch haargenau, ich bin beeindruckt.

Ich habe mir inzwischen auch ein System ausgedacht, bei dem wird das Licht mit dem Start des Programmes vollkommen gezeichnet und in kleine Rechtecke eingezeichnet.
Wenn eines dieser Rechtecke mit einem Objekt kollidiert, zeichnet es das Licht nicht mehr und gibt diese Information an die folgenden Rechtecke weiter.

Das ist aber viel Rechenaufwendiger als dieses Programm... anscheinend.
Und nicht so exakt!
Vieleicht liegt es auch daran, dass ich zu faul bin ein Doppelbuffering auszuführen und statt dessen mehrere JPanels in mehreren Ebenen nehme und darauf meine JLabels mit Bildern über das Spielfeld fahren lasse... Sowie das Licht.

Ich werde mich auf jedenfall dem Annehmen wenn ich herauskriege wie man das kopiert ^^

Danke
 

Ähnliche Java Themen


Oben