2013-06-27 7 views
0

너무 가끔씩 스프라이트 클래스로 목록을 전달하는 데 도움을 청했습니다. 여러분도 도와 주었지만 다른 벽을 만났습니다. 스프라이트 목록을 반복하려고하면 문제가 발생한다. 여기 pygame 스프라이트 애니메이션 루프가 제대로 작동하지 않습니다.

스프라이트 클래스입니다 :

class Player(pygame.sprite.Sprite): 
    def __init__ (self,frames,*groups): 
     self.frame = 0 
     super(Player,self).__init__(*groups) 

     self.images = [] 
     self.images.append(frames[self.frame]) 
     self.image = self.images[self.frame] 
     self.rect = pygame.rect.Rect((320,240),self.image.get_size()) 

    def update(self): 

     key = pygame.key.get_pressed() 
     if key[pygame.K_LEFT]: 
      self.rect.x -= 10 
      self.frame += 10 
     if key[pygame.K_RIGHT]: 
      self.rect.x += 10 
      self.frame += 1 
     if key[pygame.K_UP]: 
      self.rect.y -= 10 
      self.frame += 1 
     if key[pygame.K_DOWN]: 
      self.rect.y += 10 
      self.frame += 1 
     if self.frame > 3: 
      self.frame = 0 

여기에 주요 게임 루프입니다 :

내가 생각하는 문제는 내가 그것을로 설정하는 self.frame을 설정할 때 온다
class Game(object): 
    def main(self, screen): 
     sprite = pygame.image.load('test.png') 
     frames = sprite_system().slice_sheet(sprite,0,0,64,64,4) 
     sprites = pygame.sprite.Group() 
     self.player = Player(frames,sprites) 
     clock = pygame.time.Clock() 
     while 1: 
      clock.tick(30) 
      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        return 
       if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 
        return 

      screen.fill((200, 200, 200)) 
      sprites.update() 
      sprites.draw(screen) 
      pygame.display.flip() 
      pygame.sprite.Group.sprites 

if __name__ == '__main__': 
    pygame.init() 
    screen = pygame.display.set_mode((640, 480)) 
    Game().main(screen)   

0 뭔가가 호출 될 때마다하지만 난 그냥 어쩌면 당신들 도울 수 있는지 볼 수

self.frame 여기에 0으로 설정 self.frame = 0 su 당 (플레이어, 자기). 초기화하기 (* 그룹)

 self.images = [] 
     self.images.append(frames[self.frame]) 
     self.image = self.images[self.frame] 
     self.rect = pygame.rect.Rect((320,240),self.image.get_size()) 

및 애니메이션을 통해 루프 여기 또한 필요하다 :

def update(self): 

     key = pygame.key.get_pressed() 
     if key[pygame.K_LEFT]: 
      self.rect.x -= 10 
      self.frame += 10 
     if key[pygame.K_RIGHT]: 
      self.rect.x += 10 
      self.frame += 1 
     if key[pygame.K_UP]: 
      self.rect.y -= 10 
      self.frame += 1 
     if key[pygame.K_DOWN]: 
      self.rect.y += 10 
      self.frame += 1 
     if self.frame > 3: 
      self.frame = 0 

편집 :

스프라이트 재부 클래스

class sprite_system(object): 
    def slice_sheet(self,sprite_sheet,sprite_start_x,sprite_start_y,sprite_size_x,sprite_size_y,sheet_frames): 
     frame = [] 
     sheet_start = 1 
     frame_pos = 0 
     sprite_start_x_base = sprite_size_x 
     while sheet_start <= sheet_frames: 
      sheet = sprite_sheet 
      sheet.set_clip(pygame.Rect(sprite_start_x,sprite_start_y,sprite_size_x,sprite_size_y)) 
      sprite_clip = sheet.subsurface(sheet.get_clip()) 
      frame.append(sprite_clip) 
      sprite_start_x += sprite_start_x_base 
      sheet_start += 1 
     return frame 

답변

1
  • 당신은 p가 아닙니다. Sprite에서 스프라이트를 끈다. 그룹
  • sprite_system().slice_sheet()은 어디에 있습니까?
  • 이 줄은 아무에게 내가 그것을 고칠 수 있었다

    pygame.sprite.Group.sprites 
    
+0

하지 않습니다하지만 sprite_system(). slice_sheet는() 난에서 편집 완전히 다른 클래스 인 경우 당신은 그것을보고 싶다면 – IdecEddy

관련 문제