Verschieben Sie ein Objekt alle paar Sekunden in Pygame

Ich mache ein Arcade-Spiel mit Pygame und ich versuche, ein Sprite ändern Positionen alle paar Sekunden.

Ich habe versucht, mit time.sleep(1) und die Bildrate auf .5 ( clock.tick(.5) ) zu clock.tick(.5) .

Beide arbeiteten, um das Objekt erst nach Ablauf des Zeitintervalls zu ändern, aber sie machen auch das Sprite nach meiner Maus-Update-Koordinaten mit der gleichen Rate.

Ich habe recherchiert und kann nicht scheinen, einen anderen Weg zu finden, um den Sprite zu bewegen, ohne dass mein Programm langsamer oder "schlafen" jedes Mal, wenn es läuft.

  • Pygame macht ein Sprite Gesicht die Maus
  • Wie füge ich eine Zeile als Sprite in Pygame hinzu?
  • Versuchen, über Sprite zu ziehen oder Bildpyglet zu wechseln
  • Kann konstante Tasteneingabe ein Sprite ständig bewegen?
  • Pygame sprite nicht bewegend
  • Wie kann man einen Feind dem Spieler in pygame folgen?
  • PYGAME macht einen Sprite in die Richtung, in die er steht
  • Python Animation Timing
  • 2 Solutions collect form web for “Verschieben Sie ein Objekt alle paar Sekunden in Pygame”

    Sie können dazu eine Event mit pygame.time.set_timer() :

    Pygame.time.set_timer ()
    Wiederholt ein Ereignis in der Ereigniswarteschlange erstellen
    set_timer(eventid, milliseconds) -> None

    Legen Sie einen Ereignistyp fest, der in der Ereigniswarteschlange für jede gegebene Anzahl von Millisekunden angezeigt wird


    Hier ist ein einfaches, komplettes Beispiel. Beachten Sie, wie sich die Feinde alle 1000ms seitwärts bewegen, alle 3500ms nach unten, und Sie können alle 450ms schießen (alle mit Veranstaltungen).

    Bildbeschreibung hier eingeben


     import pygame # you'll be able to shoot every 450ms RELOAD_SPEED = 450 # the foes move every 1000ms sideways and every 3500ms down MOVE_SIDE = 1000 MOVE_DOWN = 3500 screen = pygame.display.set_mode((300, 200)) clock = pygame.time.Clock() pygame.display.set_caption("Micro Invader") # create a bunch of events move_side_event = pygame.USEREVENT + 1 move_down_event = pygame.USEREVENT + 2 reloaded_event = pygame.USEREVENT + 3 move_left, reloaded = True, True invaders, colors, shots = [], [] ,[] for x in range(15, 300, 15): for y in range(10, 100, 15): invaders.append(pygame.Rect(x, y, 7, 7)) colors.append(((x * 0.7) % 256, (y * 2.4) % 256)) # set timer for the movement events pygame.time.set_timer(move_side_event, MOVE_SIDE) pygame.time.set_timer(move_down_event, MOVE_DOWN) player = pygame.Rect(150, 180, 10, 7) while True: clock.tick(40) if pygame.event.get(pygame.QUIT): break for e in pygame.event.get(): if e.type == move_side_event: for invader in invaders: invader.move_ip((-10 if move_left else 10, 0)) move_left = not move_left elif e.type == move_down_event: for invader in invaders: invader.move_ip(0, 10) elif e.type == reloaded_event: # when the reload timer runs out, reset it reloaded = True pygame.time.set_timer(reloaded_event, 0) for shot in shots[:]: shot.move_ip((0, -4)) if not screen.get_rect().contains(shot): shots.remove(shot) else: hit = False for invader in invaders[:]: if invader.colliderect(shot): hit = True i = invaders.index(invader) del colors[i] del invaders[i] if hit: shots.remove(shot) pressed = pygame.key.get_pressed() if pressed[pygame.K_LEFT]: player.move_ip((-4, 0)) if pressed[pygame.K_RIGHT]: player.move_ip((4, 0)) if pressed[pygame.K_SPACE]: if reloaded: shots.append(player.copy()) reloaded = False # when shooting, create a timeout of RELOAD_SPEED pygame.time.set_timer(reloaded_event, RELOAD_SPEED) player.clamp_ip(screen.get_rect()) screen.fill((0, 0, 0)) for invader, (a, b) in zip(invaders, colors): pygame.draw.rect(screen, (150, a, b), invader) for shot in shots: pygame.draw.rect(screen, (255, 180, 0), shot) pygame.draw.rect(screen, (180, 180, 180), player) pygame.display.flip() 

    Wie wäre es mit

     var = 0 while True: event_handling() game_logic() if var == 5: sprite.update.position() var = 0 pygame.display.flip() var += 1 

    Offensichtlich ist das nur Pseudocode, aber man bekommt die Idee.

    Python ist die beste Programmiersprache der Welt.