2017-04-17 70 views
0

我試圖用pygame製作雨滴效果,但它似乎好像背景在更新精靈之前沒有清理。 這就是我執行代碼時的樣子.. enter image description herePygame - 雪碧運動導致圖層

我不知道是否有辦法解決這個問題。

rain.py(主文件)

#!/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(類雨滴)

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) 

回答

1

這是行,你用它來清除屏幕:

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

換句話說,您將清除從x = 100,y = 100開始的屏幕。由於pygame座標從頭向下開始並向右和向下延伸,因此不會清除x = 100和y = 100之上的屏幕。

簡單的修復方法就像在程序開始時所做的那樣在0,0處傳輸。

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