es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los sprites no volverán a aparecer en la misma posición después de un temporizador.

Entonces, he solucionado el problema donde una plataforma desaparece después de cierto tiempo cuando el jugador está parado en ella sin eliminar todas las instancias, pero ahora necesito hacer que la plataforma vuelva a aparecer después de cierto tiempo para que el jugador pueda avanzar.

He intentado crear una instancia y agregarla al grupo nuevamente en el bucle del juego y en el código mostrado a continuación agregando un nuevo temporizador, pero no sucede nada. Si agrego al grupo después de este código, las plataformas no desaparecen, por lo que supongo que agregar el sprite al grupo funciona, simplemente no puedo obtener un retraso de tiempo en su reaparición.

Si self.rect.bottom == trick_platform.rect.top -1:
trick_platform.timer += 1
if trick_platform.timer > 24:
trick_platform.kill()

La instancia se origina cuando el mundo se dibuja en el mosaico ’24’, como se muestra a continuación en la clase del mundo…

elif tile == 24:#create trick_platform
trick_platform = TrickPlatform(x * TILESIZE, y * TILESIZE)
trick_platform_group.add(trick_platform)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer que la plataforma reaparezca después de cierto tiempo, puedes modificar el código de la siguiente manera:

    1. Establece un límite de tiempo para que la plataforma desaparezca y reaparezca. Digamos que la plataforma desaparecerá durante 5 segundos y reaparecerá después de 10 segundos.
    2. Crea una variable de instancia en la clase TrickPlatform para llevar un registro del momento en que la plataforma desaparece y cuando debería reaparecer. Por ejemplo, puedes agregar dos variables disappear_time y reappear_time a la clase TrickPlatform.
    3. En el método update() de la clase TrickPlatform, actualiza las variables disappear_time y reappear_time según corresponda en función del bucle de juego.
    4. Modifica el código donde compruebas si la plataforma debe desaparecer. Debes verificar si disappear_time es menor que el tiempo actual y si la plataforma no ha sido eliminada todavía. Si ambas condiciones se cumplen, elimina la plataforma y actualiza la variable reappear_time.
    5. Modifica el código donde creas una instancia de TrickPlatform. Establece el valor inicial de reappear_time como el tiempo actual más el límite de tiempo para reaparecer (en este caso, 10 segundos).
    6. Dentro del bucle de juego, antes de verificar si la plataforma debe desaparecer, verifica si reappear_time es menor que el tiempo actual. Si es así, vuelve a agregar la plataforma al grupo.

    Aquí tienes un ejemplo de implementación:

    import pygame
    import time
    
    TIEMPO_DESAPARECER = 5
    TIEMPO_REAPARECER = 10
    
    class TrickPlatform(pygame.sprite.Sprite):
        def __init__(self, x, y):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.Surface((50, 10))
            self.image.fill((255, 0, 0))
            self.rect = self.image.get_rect()
            self.rect.x = x
            self.rect.y = y
            self.disappear_time = time.time() + TIEMPO_DESAPARECER
            self.reappear_time = time.time() + TIEMPO_REAPARECER
    
        def update(self):
            current_time = time.time()
            if current_time > self.disappear_time and not self.kill():
                self.kill()
                self.reappear_time = current_time + TIEMPO_REAPARECER
    
        def should_reappear(self):
            return time.time() > self.reappear_time
    
    # En el bucle de juego
    if trick_platform.should_reappear():
        trick_platform_group.add(trick_platform)
    
    if self.rect.bottom == trick_platform.rect.top -1:
        trick_platform.timer += 1
        if trick_platform.timer > 24:
            trick_platform.update()
    

Comments are closed.