2013-04-09 3 views
0

저는 개발중인 우주 스크롤러 슈트업에 대한 스프라이트 생성에 관한 예제를 사용하고 있습니다. 천천히 그것이 어떻게 작동하는지 이해하려고 노력하면서, 나는 화면을 가로 질러 여러 개의 스프라이트를 얻을 수 있었다. 그러나 많은 스프라이트가 생성됩니다.파이 게임 - 제한된 스프라이트 인스턴스

그래서 내가 문제를 겪고있는 것은 코드가 생성하는 다중 대신에 초기 스프라이트 수를 제한하는 것입니다. 나는 if sprites.__len__ < 10: sprites.add(drone)을 사용하는 것을 생각했으나 그것을 시도했을 때 작동하지 않았습니다.

제 생각에는 그룹을 반복 할 때마다 그룹의 스프라이트 수를 확인하고 10보다 작 으면 10에 도달 할 때까지 그룹에 스프라이트를 추가하십시오. 파괴되면, 검사를 계속하고 일정하게 유지합니다.

플레이어 클래스입니다 :

class Player(pygame.sprite.Sprite): 
    def __init__(self, *groups): 
     super(Player, self).__init__(*groups) 
     self.image = pygame.image.load('player.png') 
     self.rect = pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size()) 
     self.dx = -10 
     self.pos = random.randrange(0,screen_height) 

    def update(self): 
     self.rect.centerx += self.dx 

     if self.rect.right < 0: 
      self.kill() 

이는 스프라이트의 추가에 관한 섹션입니다.

 sprites.update() 
     screen.fill((200, 200, 200)) 
     sprites.draw(screen) 


     drone = Player() 
     self.y = random.randrange(0,screen_height) 
     sprites.add(drone) 

     pygame.display.flip() 

아마 분명하지만지도가 잘 될 것입니다.

두 번째 질문 - 생각의 확인이 더 많습니다. 스프라이트가 화면 하단에 절반으로 그려지기를 원하지 않는다면. 기본적으로 내가 말할 않는 self.rect.bottom> screen_height, 다음 스프라이트 @의 screen_height를 배치하는 경우

전체 소스 : http://pastebin.com/PLRVHtxz

편집 - 내가, 내가 그것을 해결 한 생각 바로 스프라이트 부드럽게 실행해야 .

while 1: 
      clock.tick(40) 
      numberAlien = 5 

      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        return 
       if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 
        return 


       sprites.update() 
       screen.fill((200, 200, 200)) 
       sprites.draw(screen) 


       drone = Player() 
       if sprites.__len__() < numberAlien: 
        self.y = random.randrange(0,screen_height) 
        sprites.add(drone) 

       pygame.display.flip() 
+0

너는 무엇을 질문 하나? –

+0

미안하지만, 기본적으로, 화면을 부드럽게지나 가기 위해 특정 수의 스프라이트를 얻는 방법은 무엇입니까? –

+0

이것은 도움이 될지 모르지만 완전한 해결책은 아닙니다 :'not_in_bounds (sprite) : sprite.die()'더 이상 필요없는 항목을 자동으로 제거하려면. – ninMonkey

답변

0

당신은 SpriteGroup를 서브 클래스 스프라이트의 총 수의 새 필드를 추가하고 추가 할 수 있는지 확인하기 위해 추가 방법에서 확인할 수 있습니다. __을 사용하여 변수를 검사하지 마십시오.

움직임에 대해서는 clock.tick(40) 때문에 부드러운 움직임이 보이지 않습니다. 실행을 다시 시작할 때까지 40ms 동안 기다립니다. 진드기를 10으로 줄이고 스프라이트에 대해 변경하는 dx를 조정하거나보다 보편적 인 접근 방식을 시도 할 수 있습니다.

clock.tick() 호출은 마지막 호출 이후의 ms 시간을 반환합니다. 이것은 귀하의 시간 델타가 될 것입니다. 그런 다음 글로벌 속도를 가질 수 있습니다. 이동 될 픽셀의 양은 SPEED * delta에서 계산됩니다.

+1

아마도 [sprite.Group()] (http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group) 하위 클래스를 사용하는 것이 더 좋을 것입니다. – ninMonkey

+0

당신이 옳다면 적절하게 대답을 변경했습니다. –

관련 문제