Ich habe ein Problem mit Pygame.Keine entfernten Sprites anzeigen, Pygame
Ich mache ein kleines Spiel und wenn ich sterbe, möchte ich Gegner Sprites löschen und sie später neu laden, wenn ich respawn.
Ich lösche sie erfolgreich aus ihrer Gruppe, aber sie immer noch auf dem Bildschirm, wenn ich respawn. Aber der Zusammenstoß funktioniert nicht mehr. Ich möchte die alten vom Bildschirm entfernen.
Hier ist ein minimal-Code für das Beispiel:
from pygame import *
import random
import sys
import pygame
WIDTH = 600
HEIGHT = 750
FPS = 60
SPEEDX = 5
SPEEDY = 3
# define colors
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# initialize pygame and create window
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((40, 40))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH/2
self.rect.y = HEIGHT
def update(self):
self.SPEEDX = 0
self.SPEEDY = 1
keystate = pygame.key.get_pressed()
#Move right
if keystate[pygame.K_d]:
self.SPEEDX = SPEEDX
#Move left
if keystate[pygame.K_a]:
self.SPEEDX = - SPEEDX
#Make the runner run
if keystate[pygame.K_w]:
self.SPEEDY = - SPEEDY
#Close the game
if keystate[pygame.K_LCTRL] and keystate[pygame.K_z]:
sys.exit()
#Make the character moving
self.rect.x += self.SPEEDX
self.rect.y -= self.SPEEDY
#Do not cross screen border
#Left side
if self.rect.left < 0:
self.rect.left = 0
#Right side
if self.rect.right > WIDTH:
self.rect.right = WIDTH
#Bottom side
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
#Top side
if self.rect.top < 0 :
self.rect.top = 0
# if player reaches top 1/4 of screen
if self.rect.top <= HEIGHT/4:
self.rect.centerx = WIDTH/2
self.rect.y = HEIGHT
class Enemy(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((30, 40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
self.speedx = random.randrange(-3, 3)
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 20:
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedy = random.randrange(1, 8)
def Death():
player.rect.centerx = WIDTH/2
player.rect.y = HEIGHT
all_enemies.remove(all_enemies)
player = Player()
enemy = Enemy()
all_sprites = pygame.sprite.Group()
all_enemies = pygame.sprite.Group()
all_sprites.add(player)
for i in range(10):
enemies = Enemy()
all_sprites.add(enemies)
all_enemies.add(enemies)
# Game loop
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if sprite.spritecollide(player, all_enemies, False):
Death()
# Update
all_sprites.update()
# Draw/render
screen.fill(BLACK)
all_sprites.draw(screen)
pygame.display.flip()
pygame.quit()
Sind Sie sicher, dass das Ihr Code in dem Link ist, und es funktioniert? Denn für mich läuft es gar nicht – abccd
Bitte entfernen Sie diesen Link und posten Sie hier ein [mcve] (http://stackoverflow.com/help/mcve). – skrx
Ja Entschuldigung, ich vergesse, Ihnen zu sagen, dass Sie die Leiste einmal drücken müssen, um das Spiel zu starten. Ich werde nur für das Beispiel einen neuen Code erstellen. –