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