Ein Symbol auf einer beliebigen Farbe anzeigen lassen

7

Ich entwickle ein Spiel im RPG / Roguelike-Stil. Anstatt Karten wie:

.........
.........
....@....
...h.....

Oh schau, ein Zwerg.

Ich hatte feste Hintergrundkacheln, also eine Art kachelbasiertes Rollenspiel ohne gezeichnete Kacheln. Ich mag die Idee, ASCII-Kacheln für Kreaturen und Dinge zu haben. Das spart viel Künstlerzeit. Ich kann die Kacheln ändern, damit ich eine Art Symbol bekomme, das etwas mehr mit ... zu tun hat. Aber besser als 4 Richtungen für jede einzelne Sache zu haben.

Wenn ich das in Weiß machen würde und eine Schneefläche hätte, könnten Sie nicht sehen. Also mach es schwarz. Sobald Sie einen dunklen Ort erreichen, stecken Sie wieder fest, wo sich Ihr Charakter befindet. Gibt es einen Algorithmus oder etwas, das sagen kann, dass dies zwischen der Kachel und dem NPC zu dunkel ist, und die Farbe in etwas Sichtbares ändert, aber nicht zu einem hellen Cyan von einem blassen Rosa oder was auch immer?

Die kommunistische Ente
quelle

Antworten:

8

Angenommen, Sie haben eine helle und eine dunkle Farbe für jedes Zeichen, können Sie den Unterschied in der Luminanz überprüfen, indem Sie die Kachelfarbe und die NPC-Farben in HSL konvertieren . Wählen Sie die NPC-Farbe mit dem größten Luminanzunterschied zur Kachel.

Wenn Sie nicht beide Farben manuell zuweisen möchten, können Sie einfach Folgendes fest codieren:

if (tile_color.l > 0.5)
    character_color.l = 0.1;
else
    character_color.l = 0.9;

Und weisen Sie jedem Zeichen HS-Paare anstelle von RGB-Tripletts zu.

Sie können auch immer nur einen helleren Umriss um dunkle Zeichen und einen dunkleren Umriss um helle Zeichen bereitstellen.


quelle
Kann ich den Wert von HSV hier für die gleiche Art von Effekt verwenden?
Die kommunistische Ente
Nein. Intuitiv kann der Wert "abdunkeln", aber nicht "aufhellen" oder nur zur Hälfte "aufhellen". Um eine Farbe im HSV heller zu machen, müssen Sie gleichzeitig den Wert erhöhen und die Sättigung verringern. Schauen Sie sich die Farbzylinder auf der Wikipedia-Seite an, um zu sehen, wie die Änderung funktioniert.
5

Dies setzt voraus, dass Sie die ASCII-Grafik als Bitmaps anstatt als Textwiedergabe speichern. Dies ist besser für die Leistung, Flexibilität und erleichtert die einfache Implementierung benutzerdefinierter Kachelsätze.

Anstatt die Farben abhängig von den Hintergrundfarben zu ändern, lassen Sie alle ASCII-Grafiken hell erscheinen und lassen Sie einen leichten Schlagschatteneffekt auf die Bitmaps vorrendern.

Dadurch werden die Zeichen und Gegenstände in allen Farben / Schattierungen / Tönen gut angezeigt.

Bearbeiten: Hier sind einige Beispiele

Mit einem Schatten Alt-Text

Ohne Schatten Alt-Text

AttackingHobo
quelle
Ein Schatten funktioniert immer noch nicht, wenn die Farben zu genau übereinstimmen. Am Ende sehen Sie nur einen Schatten, der nicht identifizierbar ist und von sich aus schlecht aussieht. Ein Umriss ist besser, da mehr Details der Form erhalten bleiben.
@ Joe Wreshnig, ich habe die Antwort bearbeitet und Beispiele geliefert.
AttackingHobo
Sie haben zwei Farbtöne mit niedriger Luminanz für Schriftarten mit mittlerer bis hoher Luminanz bereitgestellt. Versuchen Sie nur Schatten auf Hintergründen, die fast der Schriftart entsprechen, und Sie werden das Problem sehen. Trotzdem tritt das Problem bereits auf dem gelb schattierten "e" in "Text" auf Weiß auf.