Fazendo um símbolo aparecer em qualquer cor


7

Estou desenvolvendo um jogo estilo RPG / estilo roguelike. Em vez de ter mapas como:

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

Oh, olhe, um anão.

Eu estava tendo ladrilhos sólidos de fundo, então um RPG baseado em ladrilhos sem ladrilhos desenhados. Eu gosto da idéia de ter azulejos ASCII para criaturas e coisas. Isso economiza muito tempo do artista. Posso trocar os ladrilhos para obter algum tipo de símbolo um pouco mais ... relacionado? Mas é melhor do que ter 4 direções para cada coisa separada.

Se eu fizesse isso em branco e tivesse uma área de neve, você não conseguiria ver. Então faça preto. Assim que você chega a um lugar escuro, fica novamente preso ao local onde está seu personagem. Existe um algoritmo ou algo que pode dizer 'isso é muito escuro entre o ladrilho e o NPC' e mudar a cor para algo visível, mas não para um ciano brilhante de um rosa pálido ou o que seja?

Respostas:


8

Supondo que você tenha uma cor brilhante e uma cor escura para cada personagem, você pode verificar a diferença de luminância, convertendo a cor da peça e as cores do NPC em HSL . Escolha a cor do NPC com a maior diferença de luminância do ladrilho.

Se você não deseja atribuir manualmente as duas cores, basta codificar:

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

E atribua pares HS ao invés de trigêmeos RGB a cada personagem.

Você também pode fornecer um contorno mais claro em torno de caracteres escuros e um contorno mais escuro em torno de caracteres claros, o tempo todo.


Posso usar o valor do HSV para o mesmo tipo de efeito aqui?
O pato comunista

Não. Intuitivamente, o valor pode "escurecer", mas não "clarear", ou apenas "clarear" até a metade. Para tornar a cor mais brilhante no HSV, você precisa aumentar simultaneamente o valor e reduzir a saturação. Veja os cilindros de cores na página da Wikipedia para ver como a mudança funciona.

5

Isso pressupõe que você esteja armazenando a arte ASCII como bitmaps em vez de renderização de texto, o que é melhor para desempenho, flexibilidade e pode facilitar a implementação fácil de conjuntos de blocos personalizados.

Em vez de alterar as cores, dependendo das cores do plano de fundo, faça com que toda a luz de arte ASCII seja tonificada e tenha um leve efeito de sombra projetada previamente nos bitmaps.

Isso fará com que os personagens e itens apareçam bem em todas as cores / tons / tons.

Edit: Aqui estão alguns exemplos

Com uma sombra texto alternativo

Sem sombra texto alternativo


Uma sombra ainda não funciona quando as cores coincidem demais. Você acaba vendo uma sombra que não é identificável e parece ruim por si só. Um contorno é melhor, preservando mais detalhes da forma.

@ Joe Wreshnig, editei a resposta e forneci exemplos.
precisa

Você forneceu dois tons de baixa luminância para fontes de luminância média-alta. Experimente apenas sombras em fundos quase iguais à fonte e você verá o problema. Ainda assim, o problema já está aparecendo no "e" sombreado em amarelo em "Texto" em branco.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.