2009-07-10 5 views
6

Sto scrivendo un gioco in python con pygame e ho bisogno di renderizzare il testo sullo schermo.Qual è un buon modo per il rendering di caratteri delineati?

Voglio rendere questo testo di un colore con un contorno, in modo che non debba preoccuparsi di quale tipo di sfondo viene visualizzato il testo.

pygame.font non sembra offrire supporto per fare questo genere di cose direttamente, e mi chiedo se qualcuno ha qualche buona soluzione per raggiungere questo obiettivo?

+0

Ho accettato una risposta, ma sono ancora interessato a qualsiasi altra soluzione che esista. – SpoonMeiser

risposta

2

posso darvi un rapido e cattivo soluzione:

stampa il testo 8 volte, a circondarlo, più uno più tempo per il testo interno, come questo

UUU 
UIU 
UUU 

U per esterno colore e io per il colore interno.

+1

In realtà, quattro volte (gli angoli) è abbastanza buono se il contorno non è molto più largo di un pixel. Anche due pixel dovrebbero andare bene. Dipende dalla velocità del renderer dei font quanto sia pessima la soluzione. L'ho usato in XNA ed è abbastanza veloce lì, almeno se il testo è reso in serie. – OregonGhost

+0

buon consiglio! –

+0

è necessario solo rendere il font una volta. È possibile riutilizzare la superficie di rendering più volte per ogni volta che viene proiettata sulla superficie di destinazione. – SingleNegationElimination

3

Un modo rapido e sporca sarebbe quello di rendere il testo più volte con il colore del contorno, spostato da piccole quantità su un cerchio intorno alla posizione del testo:

 
      1 
     8 | 2 
     \ |/
     \|/ 
    7----*----3 
     /|\ 
     /| \ 
     6 | 4 
      5 

Edit: Doh sei stato Più veloce ! Non cancellerò la mia risposta, questa arte ASCII è semplicemente troppo buona e merita di vivere!

Modifica 2: Come accennato in OregonGhost, potrebbero essere necessari più o meno passaggi per il rendering del contorno, a seconda della larghezza del contorno.

+0

Vedere il mio commento alla risposta di Nick D., che si applica anche a questo. – OregonGhost