2016-07-08 4 views
0

파이 게임에서 총알을 만들려고합니다. 죄송합니다. 간단한 수정이 있다면, 나는 지금 생각할 수 없습니다.파이 게임에서 스프라이트 이동 시도

"1"버튼을 누르면 감지됩니다.

if pygame.event.get().type == KEYDOWN and e.key == K_1: 
    bullet = Bullet() 
    bullet.rect.x = player.rect.x 
    bullet.rect.y = player.rect.y 
    entities.add(bullet) 
    bullet_list.add(bullet) 
    bullet.update() 

... 이것은 실제 글 머리 기호 클래스입니다. 간격이 조금 벗어났습니다.

class Bullet(pygame.sprite.Sprite): 
    def __init__(self): 
     super(Bullet, self).__init__() 
     self.image = pygame.Surface([4, 10]) 
     self.image.fill(pygame.Color(255, 255, 255)) 
     self.isMoving = False 
     self.rect = self.image.get_rect() 

    def update(self): 
     for i in range(20): 
      self.rect.x += 3 

나는 느린 동작보다 즉시 업데이트 방법을 사용하고 있음을 알고 있습니다. 총알을 어떻게 느리게 움직이게해야합니까? 내가 본 모든 대답은 단지 하나의 객체를 멈추는 대신에 프로그램을 완전히 멈추는 것을 포함합니다. 주위에 방법이 있습니까?

답변

1

플레이어가 버튼을 누를 때만이 아니라 모든 게임 틱에서 모든 글 머리표를 업데이트해야합니다. 과 같이, 증분 이동을 할

clock = pygame.time.Clock() 
while True: 
    clock.tick(60) 
    for event in pygame.event.get(): 
     if event == KEYDOWN and event.key == K_1: 
      bullet = Bullet() 
      bullet.rect.x = player.rect.x 
      bullet.rect.y = player.rect.y 
      entities.add(bullet) 
      bullet_list.add(bullet) 
    for bullet in bullet_list: 
     bullet.update() 

을 그리고, 총알 클래스를 수정 :

그래서, 당신은 당신의 이벤트 루프로 이런 일을 할 것입니다

class Bullet(pygame.sprite.Sprite): 
    def __init__(self): 
     super(Bullet, self).__init__() 
     self.image = pygame.Surface([4, 10]) 
     self.image.fill(pygame.Color(255, 255, 255)) 
     self.isMoving = False 
     self.rect = self.image.get_rect() 

    def update(self): 
     self.rect.x += 3 
+0

감사합니다! 그것은 그것을 고쳤다. 나는 이미 프로그램에서 clock.tick()을 가지고 있었지만, 나는 당신이 말했던 것처럼 버튼 프레스에 업데이트를 넣고 있었다. 그래서 내가 올바르게 이해한다면, 단지 시간 이벤트를하기 위해 시계를 사용합니까? –

+0

'clock.tick (60)'은 루프가 초당 60 회 이상 실행되지 않도록합니다. 그 루프의 각 단계는 게임의 이산 상태 인 프레임이라고 불립니다. 이것이 초당 프레임 수 (FPS)의 출처입니다. 핵심은 멀티 태스킹 아키텍처를 사용하므로 어떤 작업이라도 다른 모든 작업을 중단시키지 않습니다. 예를 들어 애니메이션을 렌더링하는 경우 사용자 입력을 캡처하기 때문에 이미지를 업데이트 할 수 없습니다. 자세한 내용은 https://en.wikipedia.org/wiki/Game_programming#Game_structure를 참조하십시오. –

관련 문제