2017-04-17 58 views
0

在我之前的question上,我遇到了精靈的問題。所以我決定在繪製它們之前使用清晰的方法。它似乎有效,但當精靈到達屏幕底部時,即他們應該回到頂部時,他們消失了。只剩下9箇中的2個。Pygame Sprites Dissapearing

在到達底部之前。

enter image description here

後,他們到達了底部,reseted頂部。


enter image description here

主文件

#!/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 


     screen.blit(background,(100,100)) 
     raindrops.clear(screen,background) 
     raindrops.update() 
     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

不包括所有的代碼;改爲創建[mcve]。它會讓這個問題對其他人更有利,因爲閱讀,理解,測試/驗證變得更容易,而且這也會讓那些試圖找出問題的人更容易。 –

+0

下次xD會考慮這個問題 –

回答

1
if self.rect.y == HEIGHT: 

問題是一些雨滴會超過HEIGHT,因爲speedy是一個隨機數在範圍[1,8]中,因此爲speedy mig的倍數不能被2*HEIGHT整除。例如speedy = 7,rect.y從-HEIGHT = -300到-293,-286,...,295,然後到302大於300,所以==檢查永遠不會是真的,並且雨滴將永遠下降。

>=一個簡單的改變就能解決問題:

if self.rect.y >= HEIGHT: