como esconder una superficie debajo de otras 2 superficies?

Publicado por Daphnes Nohansen Hyrule
hace 5 años

<p>saludos a todos, ha sido un largo tiempo que no he hecho otra nueva pregunta, y hoy decidi hacer una nueva relacionada con pygame respecto al siguiente codigo fuente que tengo:</p>

<pre class="prettyprint"> import pygame from pygame.locals import * import sys

WIDTH = 640 HEIGHT = 480 WHITE = (255,255,255) BLACK = (0,0,0) RED = (255,0,0)

def main(): pygame.init()

screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("tratando de esconder la superficie roja.")

sblack = pygame.Surface((WIDTH/2,HEIGHT/2))
sblack.fill(BLACK)
sblackrect = sblack.get_rect()
sblackrect.centerx = WIDTH/2
sblackrect.centery = HEIGHT/2

swhite = pygame.Surface((WIDTH/2-50,HEIGHT/2-50))
swhite.fill(WHITE)
swhiterect = swhite.get_rect()
swhiterect.centerx = WIDTH/2
swhiterect.centery = HEIGHT/2

sred = pygame.Surface((50,50))
sred.fill(RED)
sredrect = sred.get_rect()
sredrect.centerx = WIDTH/2
sredrect.centery = HEIGHT/2

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill(WHITE)
    screen.blit(sblack,sblackrect)
    screen.blit(swhite,swhiterect)
    screen.blit(sred,sredrect)

    pygame.display.update()

main() </pre>

<p>en este codigo, tengo tengo 4 superficies:</p>

<p>-una superficie que llena la ventana entera de blanco</p>

<p>-una superficie negra ubicada en el centro de la ventana de color negro que esta dentro de la superficie blanca</p>

<p>-otra superficie blanca tambien ubicada en el centro de pantalla que esta dentro de la superficie negra</p>

<p>-y una superficie roja que tambien esta ubicada en el centro de la pantalla</p>

<p>y lo que estoy tratando de intentar en todo esto, es que parte de la superficie roja no se vea visible ni cuando este en la parte negra ni cuando este en la parte blanca que cubre la ventana entera.</p>

<p>desde ya, muchas gracias :3</p>

Respuesta de Cristian Olaz
hace 5 años

<p>El problema es que estás apilando rectángulos, uno más pequeño que otro, para formar ese efecto. Cuando posiblemente para lograr esa forma deberías poner una figura que tenga un "hueco" en el medio y no superponer los rectángulos. De esta forma simplemente dibujando el cuadrado rojo antes que los rectángulos negro y blanco lograría lo que vos necesitas.</p>

<p>Una forma rápida - aunque a mi parecer no muy limpia - sería mostrar el cuadrado rojo solo cuando sus coordenadas estén dentro de un rango.</p>

<pre class="prettyprint"> if cuadrado_rojo.x > 10 and cuadrado_rojo.x < 100 and cuadrado_rojo.y > 10 and cuadrado_rojo.y < 100:

mostrar el cuadrado rojo.

En caso contrario no se mostraría</pre>

<p>De esta forma el cuadrado se ocultaría <strong>aunque completamente</strong>.</p>

<p>Pero repito, para ocultar objetos el procedimiento habitual es simplemente marcar el orden en que se muestran. Los que están al "fondo" se dibujan primero, y los que están al frente se dibujan después.</p>

Para poder participar del foro necesitas iniciar sesión con tu cuenta. Si no tienes una puedes registrarte utilizando tu email!

Iniciar sesión Quiero registrarme