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()
Este tipo de cosas se realiza mejor en la .update()
función de su sprite . Verifique si la y
coordenada de los sprites Rect
supera 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 DropSprite
es 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 x
de (0 - self.rect.height)
, ya que el x,y
de un rect es la coordenada superior izquierda. Moverlo 0
hace que de repente aparezca en la parte superior. Moverlo lo -height
coloca 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
Déjame decir algunas palabras