Ich arbeite an einem Roguelike und habe dafür einen FoV-Algorithmus (Ray Tracing / Casting Field-of-View) erstellt, der darin besteht, Bresenham-Linien zu jedem Punkt in einem durchgezogenen Kreis zu zeichnen. Es ist artefaktfrei (und ziemlich effizient), aber es fehlt eine wichtige Anforderung von mir: Symmetrie (wenn Sie ein Monster sehen können, muss es Sie auch sehen können).
Hier ist ein Beispiel für das nicht symmetrische Verhalten meines Codes. Im linken Bild stehe ich in einer Ecke (rote 'X'-Blöcke = Wand). Ich kann die oberen rechten Kacheln sehen. Wenn ich jedoch zu einer dieser Kacheln wechsle (rechtes Bild), kann ich die Kachel, von der ich stamme, nicht mehr sehen.
Ich glaube, ich bin vielleicht auf der Suche nach einer Form des zulässigen Sichtfelds, aber nur, weil der Artikel im Roguebasin vorschlug, Symmetrie zuzulassen. Gibt es alternative Mittel, um Symmetrie zu erhalten?
quelle
Antworten:
Es scheint, dass Sie ein Quadrat einfügen, wenn Sie einen beliebigen Punkt darin sehen können, während sich das Auge am einzelnen Fixpunkt befindet.
Sie sollten jedoch nur dann ein Quadrat einfügen, wenn Sie die Mitte sehen können (vorausgesetzt, das "Auge" befindet sich ebenfalls in der Mitte). Oder Sie können Strahlen von jeder Ecke des Startquadrats zu den Ecken des getesteten Quadrats zeichnen, wenn Sie eines von einem sehen können, dann schließen Sie ein.
Der entscheidende Punkt ist, dass die Hitbox eines Quadrats auch alle Stellen sein sollte, an denen sich das Auge befinden muss.
quelle