Hacer que vuelvan a aparecer filas de sprites en la parte superior de la pantalla en pygame

Sarab Singh:

Estoy tratando de hacer que las filas de sprites vuelvan a aparecer en la parte superior de la pantalla cuando desaparezcan de la parte inferior. Soy capaz de hacer que los sprites se muevan hacia abajo y fuera de la pantalla, pero no sé si reaparecerán tan pronto como una fila se mueva. Aquí está el código que tengo hasta ahora:

import pygame

import sys

from pygame.sprite import Sprite

class Rain:

    def __init__(self):

        pygame.init()

        self.screen = pygame.display.set_mode((1200, 800))
        pygame.display.set_caption("Rain Drops")

        self.bg_color = (100,100,100)


        self.rain_drops = pygame.sprite.Group()

        self._create_drop()
   

        drop = Drop()



    def run_rain(self):
           

        while True:

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

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        sys.exit()


            self.screen.fill(self.bg_color)


            self._update_drops()

            
            self.rain_drops.draw(self.screen)


            pygame.display.flip()


    def _create_drop(self):

        drop = Drop()
        drop.rect.x = -10 
        drop.rect.y = 4
        drop_start_x = drop.rect.x
        drop_start_y = drop.rect.y


        for row_number in range(5):
            for drop_number in range(20):
                drop = Drop()
                drop.rect.x = drop_start_x + 70 * drop_number
                drop.rect.y = drop_start_y + 100 * row_number


                self.rain_drops.add(drop)
    

    def _update_drops(self):
        self.rain_drops.update()



class Drop(Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.image.load('smaller_drop.bmp')
        self.rect = self.image.get_rect()


    def update(self):
        self.rect.y += 1




rain = Rain()
rain.run_rain()
Kingsley:

Este tipo de cosas se realiza mejor en la .update()función de su sprite . Verifique si la ycoordenada de los sprites Rectsupera la altura de la ventana y, de ser así, muévala hacia arriba.

Sin embargo, ha codificado las dimensiones de la ventana dentro de la función de inicialización de la pantalla. Necesitamos conocer la longitud de la ventana en la actualización, por lo que deben trasladarse a variables constantes.

class Rain:
    WINDOW_WIDTH = 1200
    WINDOW_HEIGHT= 800

    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((self.WINDOW_WIDTH, self.WINDOW_HEIGHT))
        pygame.display.set_caption("Rain Drops")

Ahora en el DropSpritees bastante fácil comparar la posición contra la altura de la ventana. si la posición es mayor que la altura de la ventana,

class Drop(Sprite):

    def __init__(self):
        super().__init__()
        self.image = pygame.image.load('smaller_drop.bmp')
        self.rect = self.image.get_rect()

    def update(self):
        self.rect.y += 1
        # if we go off the bottom of the window, move back to top
        if ( self.rect.y > Rain.WINDOW_HEIGHT ):   
            self.rect.y = 0 

También es posible que desee que la caída comience justo encima de la pantalla para que "se vea". En este caso, comience con un xde (0 - self.rect.height), ya que el x,yde un rect es la coordenada superior izquierda. Moverlo 0hace que de repente aparezca en la parte superior. Moverlo lo -heightcoloca justo por encima de la vista del jugador.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cómo hacer que la barra de navegación permanezca fija en la parte superior de la pantalla?

Cómo hacer que las filas agregadas automáticamente aparezcan en la parte superior de la hoja de Google

Coloca la foto en la parte superior de la pantalla

Coloca la foto en la parte superior de la pantalla

Colocar div en la parte superior actual de la pantalla

tostadas personalizadas en la parte superior de la pantalla

¿Utiliza .horizontal ScrollArea en la parte superior de la pantalla?

UIView aparece en la parte superior izquierda de la pantalla

¿Cómo hacer que el registrador interprete los retornos de carro como aparecerían en la pantalla?

Android Studio hace que esta línea azul en la parte superior de la pantalla desaparezca

padding hStack en la parte superior de cualquier pantalla

Congele <div> en la parte superior de la pantalla, haga que el <div> restante llene la pantalla y desplácese

Cómo hacer que la barra de navegación permanezca en la parte superior en CSS

¿Cómo puedo hacer que un div se pegue en la parte superior de la pantalla una vez que se ha desplazado?

Filas de Bootstrap: haga que la fila inferior aparezca en la parte superior

¿Cómo hacer que un cuadro de texto responda en la parte superior de la imagen?

Hacer que solo se pueda hacer clic en la parte superior de un elemento

Contenedor Flutter en la parte superior de las filas

Al hacer doble clic en el elemento li, jQuery scroll va a la parte superior de la pantalla

Hacer que la barra de menú esté fija en la parte superior al desplazarse

No se puede hacer que el encabezado esté en la parte superior de la página

Coloque los resultados de la búsqueda en la parte superior de la pantalla en vi

¿Cómo configuro la ubicación del botón para que esté en la parte superior derecha de la pantalla?

¿Cómo configuro la ubicación del botón para que esté en la parte superior derecha de la pantalla?

Filas pegajosas: recuperar algunas filas siempre en la parte superior de la lista en postgresql

cómo alinear la imagen en la parte superior derecha de la pantalla en flutter

¿Cómo colocar un widget en la parte superior de la pantalla y otro en la parte inferior en flutter?

Dibujar en la parte superior de la pantalla sin solicitud de permiso por encima de 6.0

centrar el texto en una vista en la parte superior de la pantalla (react-native)

TOP Lista

CalienteEtiquetas

Archivo