Problem mit Sichtfeld/Licht in einem Raster

stevey

Aktives Mitglied
Hi Leute,
ich bin mal wieder dabei, ein Spiel zu programmieren. Dieses spielt sich innerhalb eines Rasters ab. Nun will ich eine Art Sichtfeld für die Spieler einbauen, man könnte das auch als Taschenlampe ansehen. Mein Problem dabei ist, den Teil, den man nicht sieht, also den Schatten, den Objekte werfen zu berechnen/herauszufinden. Alle Objekte sind in einem 2-dimensionalen Array gespeichert und sind streng an das Raster gebunden. So soll es auch mit dem Sichtfeld und dem Schatten sein.

Ich hab das ganze mal als Screenshot angehängt, um es zu verdeutlichen.
Gelb markierte Felder = Sichtfeld/Licht
Kisten = Objekte, die die Sicht blockieren/Schatten werfen

Meine Frage ist also, wie würde sich ein Schatten hier verhalten und wie berechnet man ihn?

Danke , euer stevey


 
S

SlaterB

Gast
ein paar Regeln musst du selber festlegen,
nimm die erste Kiste 4 Felder vom friedlichen Spieler entfernt, was ist mit dem Feld direkt nördlich,
soll dieses vom Spieler komplett sichtbar oder komplett schattig oder (hoffentlich nicht) gemischt sein?

wenn mir ein recht spontaner Versuch erlaubt ist, es mag noch bessere geben:
nimm von Kisten in nördliche Richtung jeweils die obere linke und untere rechte Ecke,
bilde zwei mathematische Linien, etwa zum Mittelpunkt des Spieler-Kästens,
(das muss also in einem etwas genaueren mathematischen Koordinatensystem passieren, ;) , Kästenbreite 1,
außerdem öde Mathe-Geraden usw., doch mal wieder zu was gute)

gehe von der Kiste aus weiter in x-Richtung, soweit nötig, berechne für ein x und das nächste x, x+1, die 4 y-Werte für diese beiden Linien,
auf einer Papierskizze wirst du die Schnittpunkte erkennen und auch welche Kästchen ganz oder teilweise (gar % abschätzen) davon umschlossen werden,
bisschen Arbeit das in Java zu übersetzen, aber nichts was man nicht gezielt mit Grundmitteln erarbeiten kann,
diese gefundenen Felder liegen dann im Schatten, falls nicht sowieso schon von vorherigen Durchläufen für andere Kisten,
falls nicht selber eine Kiste usw.

nach Süden hin entsprechend alles andersrum, oder gespiegelt für entsprechende Kisten im Norden ausrechnen,
und die leicht zu denkenden passenden Felder im Süden markieren
 

Marco13

Top Contributor
Ja, das ist eigentlich "ganz normale" Schattenberechnung, aber eben ... komisch durch das grobe Raster. Vielleicht macht es das einem auch etwas leichter. @SlaterB Der Ansatz klingt nahe liegend, aber das mit dem "Norden" und "Süden" habe ich nicht ganz kapiert: Spontan würde ich von der Lichtquelle aus Strahlen durch die Ecken der Objekte schießen, und dahinter ein Polygon erstellen, das dem "2D-Shadow-Volume" entspricht. Dadurch, dass es ja nur um wenige Blöcke geht, kann man dann wohl recht schnell testen, ob die anderen Blöcke dort drin liegen.

Was zum Staunen, Weinen oder sonstwas: Left 4k Dead
 

fastjack

Top Contributor
Ich würde mich an Ultima 4 orientieren, bisschen googlen (line of sight), dann findest Du den Algorithmus, ich glaube als Assembler, aber sehr gut dokumentiert. Für 2d mit Feldern ist das der beste meiner Meinung nach, den es je gab.

Ah, habs noch als Lesezeichen:

Crafting a Vintage CRPG: Part 4
 

stevey

Aktives Mitglied
Vielen Dank an alle, das war gar nich so schwer wie erwartet :).
Die Beschreibung von SlaterB hat mich ziemlich schnell auf die Idee mit den Polygonen, wie es Marco13 beschrieben hat gebracht, wodurch es mit relativ wenig aufwand möglich war, die Schatten zu berechnen. Folgendes Problem :
nimm die erste Kiste 4 Felder vom friedlichen Spieler entfernt, was ist mit dem Feld direkt nördlich
hab ich dann so gelöst, dass er nur Felder, die zu mehr als 50% in dem Polygon sind als Schatten dargestellt werden.

@Marco13
Left 4k Dead kannte ich schon und hab immer diesen Schattenwurf bewundert, aber jetzt weiß ich ungefähr wie so etwas funktioniert :applaus:.

@fastjack
hab mir den Link mal flüchtig angeschaut, aber da ich mit der Lösung durch Polygone schon recht weit war, hab ich mir den Artikel nicht genau durchgelesen. trotzdem danke dafür.

Und hier noch das Endergebnis:


Nochmals Danke, euer stevey
 

stevey

Aktives Mitglied
sry für den Doppelpost, aber ich hab jetzt noch eine Lösung gefunden, die sich speziell bei der Umsetzung in solch einem Raster anbietet. Und zwar prüfe ich einfach ob sich die Linien von jedem Punkt zu dem Spieler mit einem blockierenden Objekt schneidet. Wenn ja, wird dieses Rasterfeld als Schatten gekennzeichnet. Natürlich gehe ich dabei immer von dem Mittelpunkt der Kästchen aus. Der Vorteil von dieser Methode ist in meinen Augen eine bessere Performance und ein übersichtlicherer Code. Beides ist natürlich von der Art der Umsetzung beider Lösungen abhängig^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
N Problem mit Kollisionsabfrage beim Fallen Jump & Run Spiele- und Multimedia-Programmierung 5
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
T Problem mit ClassLoader und LWJGL Spiele- und Multimedia-Programmierung 5
M Scrolling Repaint Problem Spiele- und Multimedia-Programmierung 2
Samake03 [Problem] layeredPane bzw. Viewport Spiele- und Multimedia-Programmierung 3
Helgon glTexParameter / glTexImage2D Problem Spiele- und Multimedia-Programmierung 11
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
M Problem mit Gameserver / Datensynchronisation Spiele- und Multimedia-Programmierung 10
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
H Problem mit JMonkeyEngine3 und OgreXML Spiele- und Multimedia-Programmierung 3
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
T Problem mit Speicherverbrauch Spiele- und Multimedia-Programmierung 5
S Programmstruktur Problem! Spiele- und Multimedia-Programmierung 8
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
C MP3 Handler-Problem Spiele- und Multimedia-Programmierung 13
C [gelöst] MP3-Codec-Problem Spiele- und Multimedia-Programmierung 2
K Schiebepuzzle Array Zufallszahlen Problem Spiele- und Multimedia-Programmierung 8
J Java 3D Problem Spiele- und Multimedia-Programmierung 2
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
K Problem beim Anzeigen von Bildern Spiele- und Multimedia-Programmierung 5
D Problem mit Überprüfung beim Lottospiel Spiele- und Multimedia-Programmierung 6
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
A KeyListener - Thread Problem Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben