2014-01-14 3 views
0

파이 게임을 사용하여 게임을 작성 중입니다. 게임을 할 때 마우스로 창을 끌면 게임이 일시 중지 된 것처럼 보입니다. 그러나 마우스 클릭을 놓으면 적들이 모든 벽을 지나쳐 가며 거리로 나아갑니다.창이 파이 게임에서 드래그되고 있는지 확인하는 방법

루프가 계속해서 스프라이트의 위치를 ​​업데이트하지만 어떤 이유로 벽과 적 사이의 충돌을 감지하지 못하기 때문에 이것을 추정합니다.

어쨌든, 파이 게임이 창을 끌고 있는지 말해달라고 결정했습니다. 그런 다음 게임을 일시 중지하는 것으로 생각했습니다.

이 작업을 수행 할 수있는 기능이 있습니까? 그렇지 않으면 어떻게해야합니까?

이 문제가 해결되지 않으면 전체 화면을 전체 화면으로 유지할 수는 있지만이를 수정하는 것이 좋습니다.

+0

누군가가 창을 끌 때 대답을 찾지 않는 것처럼 보입니다. 이것은 누군가가 창을 끌고 그 일이 멈추게 할 때 일어나는 일을 알아 내야하는 것처럼 보입니다. 창을 끌 때 게임에 눈치 채지 않아야합니다. – user2357112

+0

나는이 반응이 조금 늦었다는 것을 알고있다. 그러나 코멘트에 관해서는, 나는 동일한 효과를 알아 차렸고, 나는 코드가 계속해서 실행 되었기 때문에가 아니라, DeltaTime = clock.tick (30)을 사용하여 느린 컴퓨터를 조정했기 때문에 이것이 루핑이 늦어 지지만 클록이 지연되지 않으므로이 값이 훨씬 더 큰 비율로 증가합니다. 왜냐하면 나는 clock.tick (30) 1 여분의 시간으로 변수를 선언함으로써 값을 "낭비"했을 때, 이것은 멈 춥니 다. – user3011212

답변

0

조금 늦었지만 아직 누구에게나 유용 할 수 있기를 바랍니다. pygame에서 프로그램의 FPS를 인쇄하면 윈도우를 드래그하거나 반올림 할 때 델타 시간이 매우 길어지는 것을 볼 수 있습니다.

델타 시간이 특정 값 이상일 때마다 메인 루프가 반환됩니다.

class MainProgram(object): 
    def __init__(self, many_variables): 
     # Much code here 

     self.clock = pygame.time.Clock() 
     self.dt = self.clock.tick(60)/1000 

    def mainloop(self): 
     while self.running == True: 
      self.dt = self.clock.tick(60)/1000 
      if self.dt >= 0.05 
       return 
      # Rest of the program is only executed, if delta-time is below 0.05 sec 

내 FPS는 60으로 제한됩니다. 동시에 DT는 초 단위로 계산됩니다 (파이 게임은 밀리 초를 사용합니다!). 그것이 너무 높은 resp를 올리면. FPS가 너무 낮게 떨어지면 (0.05s = 20FPS 이상) 주 코드를 더 이상 실행하지 않습니다.

필요에 맞게 값을 조정할 수 있습니다. 나는 게임에 대해 프레임 한계에 도달 할 수없는 구형 기계 (예 : 25FPS에서 DT는 이미 0.04 초!)에서 프로그램을 실행할 수 있어야하므로 최대 0.05가 한계라는 것을 알아 냈습니다.

이것이 어떤 용도로 사용되었는지 알려주세요. :)

+0

이 멈 춥니 다. 공정하다. 실행을 계속할 때 값을 제한으로 설정. 나는 그 문제를 완전히 피하기 위해 전체 화면을 사용했다. – user3011212