2017-04-17 4 views
0

Ich versuche, einen Regeneffekt mit Pygame zu machen, aber es scheint, als ob der Hintergrund vor der Aktualisierung der Sprites nicht aufräumt. das ist, wie es aussieht, wenn ich den Code ausführen .. enter image description herePygame - sprite Bewegung verursacht Ebenen

Ich frage mich, ob es eine Möglichkeit gibt, dieses Problem zu beheben.

rain.py (Hauptdatei)

#!/usr/bin/python 
VERSION = "0.1" 
import os, sys, raindrop 
from os import path 

try: 
    import pygame 
    from pygame.locals import * 
except ImportError, err: 
    print 'Could not load module %s' % (err) 
    sys.exit(2) 

# main variables 
WIDTH, HEIGHT, FPS = 300, 300, 30 


# initialize game 
pygame.init() 
screen = pygame.display.set_mode((WIDTH,HEIGHT)) 
pygame.display.set_caption("Rain and Rain") 

# background 
background = pygame.Surface(screen.get_size()) 
background = background.convert() 
background.fill((40,44,52)) 

# blitting 
screen.blit(background,(0,0)) 
pygame.display.flip() 

# clock for FPS settings 
clock = pygame.time.Clock() 


def main(): 
    raindrops = pygame.sprite.Group() 

    # a function to create new drops 
    def newDrop(): 
     nd = raindrop.Raindrop() 
     raindrops.add(nd) 

    # creating 10 rain drops 
    for x in range(0,9): newDrop() 

    # variable for main loop 
    running = True 

    # event loop 
    while running: 
     clock.tick(FPS) 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       running = False 

     raindrops.update() 
     screen.blit(background,(100,100)) 
     raindrops.draw(screen) 
     pygame.display.flip() 
    pygame.quit() 

if __name__ == '__main__': main() 

raindrop.py (Klasse für Regentropfen)

import pygame 
from pygame.locals import * 
from os import path 
from random import randint 
from rain import HEIGHT 

img_dir = path.join(path.dirname(__file__), 'img') 

class Raindrop(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.width = randint(32, 64) 
     self.height = self.width + 33 
     self.image = pygame.image.load(path.join(img_dir, "raindrop.png")).convert_alpha() 
     self.image = pygame.transform.scale(self.image, (self.width, self.height)) 
     self.speedy = 5 #randint(1, 8) 
     self.rect = self.image.get_rect() 
     self.rect.x = randint(0, 290) 
     self.rect.y = -self.height 

    def update(self): 
     self.rect.y += self.speedy 
     if self.rect.y == HEIGHT: 
      self.rect.y = -self.height 
      self.rect.x = randint(0, 290) 

Antwort

1

Das ist die Linie, die Sie den Bildschirm löschen verwenden:

screen.blit(background, (100, 100)) 

Mit anderen Worten; Sie löschen den Bildschirm beginnend bei x = 100, y = 100. Da pygame-Koordinaten von oben nach links und rechts und unten beginnen, löschen Sie nicht den Bildschirm links von x = 100 und oberhalb von y = 100.

Einfache Lösung ist blitting bei 0, 0 wie Sie am Anfang des Programms getan haben.

screen.blit(background, (0, 0)) 
Verwandte Themen