2017-04-17 3 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: 

speedyが乱数であるため、問題が、いくつかの雨の滴がHEIGHTを超えて行くで範囲[1,8]内にあるので、speedy migの倍数2*HEIGHTで割り切れません。たとえば、speedy = 7の場合、rect.yは-HEIGHT = -300から-293、-286、...、295、次に302より大きく300になりますので、==チェックは決して真ではなく、雨滴は永遠に降ります。 >=への簡単な変更が問題を解決します

if self.rect.y >= HEIGHT: