star set_alpha pos name event python pygame event-driven

python - set_alpha - pygame star



¿Cuál es la secuencia correcta para blanquear superficies en la pantalla en pygame? (2)

Los gráficos por ordenador en 2D basados ​​en mapas de bits son como dibujar o pintar: coloca la tinta nueva encima de lo que ya haya. Entonces, tu fondo debe ser lo primero que dibujas cada vez.

Estoy creando un reproductor de mp3 simple y mi primera tarea fue crear un botón simple que un usuario podría presionar. Creé una clase llamada Button que manejó este comportamiento y detecta si un usuario ha hecho clic en él y luego cambia de color. Ahora estoy tratando de tener un texto predeterminado que muestra el botón y otra cadena (pres_string) que se mostrará si se presiona el botón.

El único problema es que la superficie de fondo parece estar en el lugar equivocado y está haciendo referencia a cualquier cambio que haya realizado.

Aquí está mi código:

http://pastebin.com/Nh3yy01X

Como pueden ver, he comentado las líneas que describí y probé con variables básicas en la función principal solo para probar lo que estaba pasando mal.

Gracias por cualquier ayuda.

(Siéntase libre de cambiar el título de la pregunta, no estaba seguro de qué describió con mayor precisión mi problema)


Despeje la superficie de cada lazo

def draw(self): # clear screen." self.screen.fill( self.color_bg ) # first draw background # Then buttons # then any extra top level text # update pygame.display.flip()

consejo: para los colores, puede llamar a pygame.Color () con nombres humanos como el red ( gray20 y gray80 tienen un buen contraste, para usar para bg y texto).

from pygame import Color text = Color(''gray20'')

Su botón, psuedocode. Solución: color movido como miembro de instancia.

class Button(object): def __init__(self, text, rect=None): self.color_bg = Color("gray20") self.color_text = color("gray80") if rect is None: rect = Rect(0,0,1,1) self.rect = rect self._render() def _render(self): # draw button and .render() font, cache to surface for later. self.surface_cached = self.surface.copy() # render text #if size changes, save rect.size of cached surface , mantaining location self.rect.size = cache.get_rect.size def draw(self): # draw cached surface screen.blit( self.surface_cached, self.rect)

Para el uso de Rect.collidepoint http://www.pygame.org/docs/ref/rect.html#Rect.collidepoint