2014-05-25 23 views
10

Sto usando Pygame per disegnare alcune cose. Il problema è che hanno un sacco di bordi alias:Forme antialiasing in Pygame

Aliased concentric circles

voglio farli più morbida, in questo modo:

Smooth concentric circles


La mia idea finora è stato quello di disegnare la forma in doppia dimensione e quindi utilizzare

pygame.transform.smoothscale(surf, (w/2, h/2)) 

per ridurlo alla dimensione che voglio.

Sfortunatamente se sto disegnando le mie forme su una superficie trasparente, la scala liscia trasforma i bordi che stavano toccando i pixel trasparenti neri!

  • Come si smoothscale un quadro senza girare pixel alfa-trasparente in nero, o
  • Altrimenti come faccio a antialias bordi?
+0

Esempio eseguibile per favore. – Veedrac

+0

Non ho usato Pygame per un po ', o molto, ma sarebbe possibile creare una nuova immagine che contenga la parte dello sfondo che deve essere sopra, ingrandita, con lo sprite sovrapposto, e poi rimpicciolisci e blit * quello *? – johncip

+0

Esiste un metodo per disegnare cerchi con antialiasing (http://www.pygame.org/docs/ref/gfxdraw.html). Puoi usarlo per disegnare un cerchio attorno al tuo cerchio pieno? – elParaguayo

risposta

11

Per disegnare forme piene antialiasate con pygame, utilizzare il modulo gfxdraw e disegnare una forma riempita regolare e uno schema antialias. Da http://www.pygame.org/docs/ref/gfxdraw.html:

"Per disegnare una forma con anti alias e riempita, utilizzare prima la versione aa * della funzione, quindi utilizzare la versione riempita."

Nota che è necessario importare gfxdraw in modo esplicito, ad esempio from pygame import gfxdraw.

+0

Grazie! Il problema è che ho bisogno di una metà di un'ellisse. Immagino per ora che disegnerò l'intera ellisse e ne useremo metà ... –