Bewegt einen Sprite auf die andere Seite, wenn ein Sprite aus dem Bildschirm Pygame bewegt

Wenn ich ein Sprite habe (siehe unten), dass ich mich bewegen kann, den Bildschirm mit den Pfeiltasten. (Auf und Ab bewegt sich vorwärts und rückwärts, links und rechts ab.) Ich habe mich gefragt, ob es möglich wäre, auf die andere Seite des Bildschirms zu gehen, wenn es losgeht? Aber so funktioniert es, was auch immer der Winkel ist, und wenn es halb in den Rand gefahren ist, erscheint halb auf der einen Seite. (Art von Schlange) Gibt es eine Möglichkeit, dies zu tun?

Auto

Hier ist mein Code so weit:

import sys, pygame, math from pygame.locals import * pygame.init() SCREEN = pygame.display.set_mode((800, 600)) car = pygame.transform.scale(pygame.image.load('Car.png').convert_alpha(), (64, 64)) pygame.display.set_caption('Car Game') pygame.display.set_icon(car) FPS = pygame.time.Clock() carX = 400 carY = 100 angle = 90 speed = 0 while True: if angle == 360: angle = 0 if angle == -1: angle = 359 SCREEN.fill((0,0,0)) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() keys = pygame.key.get_pressed() if keys[K_a] or keys[K_LEFT]: angle += speed elif keys[K_d] or keys[K_RIGHT]: angle -= speed if keys[K_w] or keys[K_UP]: speed += 1 elif keys[K_s] or keys[K_DOWN]: speed -= 0.5 carX += speed*math.cos(math.radians(angle)) carY -= speed*math.sin(math.radians(angle)) speed *= 0.95 rotcar = pygame.transform.rotate(car, angle) position = rotcar.get_rect(center = (carX,carY)) SCREEN.blit(rotcar, position) pygame.display.update() FPS.tick(24) 

  • Pygame brach zusammen?
  • Wie man einen Sprite bounce von den Kanten des Fensters in pygame
  • TypeError: 'int' Objekt hat kein Attribut '__getitem__'
  • Gibt es einen Weg, um Paletten für indizierte pygame.Surfaces zu verschmelzen?
  • Pygame Anzeigeposition
  • Kombinieren Sie NumPy Arrays nach Referenz
  • One Solution collect form web for “Bewegt einen Sprite auf die andere Seite, wenn ein Sprite aus dem Bildschirm Pygame bewegt”

    Ich bin nicht zu vertraut mit Pygame, aber ich denke, dieses Spiel (md5: 92f9f508cbe2d015b18376fb083e0064 Datei: spacegame.zip) hat die Funktion, die Sie suchen. Danke an den Autor, DR0ID_, um es öffentlich auf seiner Website zugänglich zu machen

    Um die "Wrap-around" -Funktion in deinem Auto-Spiel zu implementieren, habe ich diese Funktion von "game.py" benutzt:

     def draw(self, surface): wrap = 0 for s in self.sprites(): r = s.rect if r.left<0: r.move_ip(800, 0) wrap = 1 elif r.right > 800: r.move_ip(-800, 0) wrap = 1 if r.top < 0: r.move_ip(0, 600) wrap = 1 elif r.bottom > 600: r.move_ip(0, -600) wrap = 1 if wrap: surface_blit(s.image, r) wrap = 0 

    Nach ein paar Anpassungen bin ich mit diesem Arbeitsbeispiel gelandet:

     import sys, pygame, math from pygame.locals import * pygame.init() # Added HEIGHT and WIDTH as fixed variables WIDTH = 800 HEIGHT = 600 SCREEN = pygame.display.set_mode((WIDTH, HEIGHT)) car = pygame.transform.scale(pygame.image.load('Car.png').convert_alpha(), (64, 64)) pygame.display.set_caption('Car Game') pygame.display.set_icon(car) FPS = pygame.time.Clock() carX = 400 carY = 100 angle = 90 speed = 0 while True: if angle == 360: angle = 0 if angle == -1: angle = 359 SCREEN.fill((0,0,0)) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() keys = pygame.key.get_pressed() if keys[K_a] or keys[K_LEFT]: angle += speed elif keys[K_d] or keys[K_RIGHT]: angle -= speed if keys[K_w] or keys[K_UP]: speed += 1 elif keys[K_s] or keys[K_DOWN]: speed -= 0.5 carX += speed*math.cos(math.radians(angle)) carY -= speed*math.sin(math.radians(angle)) speed *= 0.95 rotcar = pygame.transform.rotate(car, angle) position = rotcar.get_rect(center = (carX,carY)) # Basically a copy/paste of the "draw"-function from the spacegame.zip wrap_around = False if position[0] < 0 : # off screen left position.move_ip(WIDTH, 0) wrap_around = True if position[0] + rotcar.get_width() > WIDTH: # off screen right position.move_ip(-WIDTH, 0) wrap_around = True if position[1] < 0: # off screen top position.move_ip(0, HEIGHT) wrap_around = True if position[1] + rotcar.get_height() > HEIGHT: # off screen bottom position.move_ip(0, -HEIGHT) wrap_around = True if wrap_around: SCREEN.blit(rotcar, position) position[0] %= WIDTH position[1] %= HEIGHT carX %= WIDTH carY %= HEIGHT SCREEN.blit(rotcar, position) pygame.display.update() FPS.tick(24) 
    Python ist die beste Programmiersprache der Welt.