문제

저는 파이게임과 라즈베리 파이를 사용하는 레이저 태그 게임 프로젝트를 진행하고 있습니다.게임에서 게임 시간을 추적하려면 백그라운드 타이머가 필요합니다.현재 이 작업을 수행하기 위해 다음을 사용하고 있지만 제대로 작동하지 않는 것 같습니다.

pygame.timer.get_ticks()

두 번째 문제는 게임을 다시 시작할 때 이 타이머를 재설정하는 것입니다.프로그램을 다시 시작할 필요 없이 게임을 다시 시작해야 하며 이는 타이머를 재설정해야만 완료될 수 있을 것 같습니다.

간단히 말해서 필요한 것은 백그라운드 타이머 변수를 갖고 while 루프에서 언제든지 재설정할 수 있는 것입니다.

저는 Python과 pygame의 진정한 초보자입니다. 하지만 이 문제의 해결은 제 지식과 프로젝트 진행에 큰 도움이 될 것입니다.어떤 도움이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

이를 위해 반드시 파이게임이 필요한 것은 아닙니다. time.time() 잘 작동해야합니다 pygame.time.get_ticks(), 파이게임이 초기화된 이후의 밀리초가 아니라 Unix Epoch 이후의 초를 보고합니다.

마지막 재설정 이후(또는 첫 번째 재설정으로 간주할 수 있는 게임 시작 이후) 경과된 시간을 측정하려고 합니다.당신이 가지고 있는 두 함수는 둘 다 임의의 기준점 이후 경과된 시간을 반환합니다.변수를 유지하기 위해 이를 달성하는 가장 간단한 방법 t0.이 변수는 마지막 재설정(또는 게임 시작) 시의 시간 값을 유지합니다.

다음은 타이머의 값을 무한 반복하고 지속적으로 인쇄하여 3초에 도달할 때마다 재설정하는 예입니다.

# import the builtin time module, this is always available
import time

# initialize the t0 variable, "starting the stopwatch"
t0 = time.time()

while True:
  # calculate the time since some reference point (here the Unix Epoch)
  t1 = time.time()

  # calculate the difference, i.e. the time elapsed
  dt = t1 - t0

  if dt >= 3:
    print "Three seconds reached, resetting timer"
    t0 = t1
  else:
    print "Time elapsed is", dt, "seconds"

Python의 객체 지향 기능을 알고 싶다면 이것이 연습할 수 있는 좋은 기회입니다.위의 동작은 다음과 같이 깔끔하게 캡슐화될 수 있습니다. Stopwatch 수업, 예를 들어~와 함께 get_seconds() 그리고 reset() 행동 양식.

이러한 클래스를 작성하면 상위 수준 타이밍 논리 코드가 매우 간단하고 읽기 쉬워질 수 있습니다.

my_timer = Stopwatch()
print my_timer.get_seconds(), "seconds have elapsed since start/reset"
my_timer.reset()

기본 구현의 세부 사항은 코드에 숨겨져 있습니다. Stopwatch 수업.

다른 팁

pygame.init()가 호출되면 Pygame 타이머가 시작됩니다. 따라서 프로그램을 한 번 실행 한 다음 동일한 실행에서 다른 게임 세션을 시작하면 참조 변수를 사용하여 타이머를 추적하고 재설정 할 수 있습니다.

예 :

#your game
import pygame
from pygame import time as T
#do your stuffs
pygame.init()
while True: #this loop never ends and you want to reset timer in this loop if I am not wrong.
    if(new_session):
        tim_var=T.get_ticks()
        new_session=0

    #do your stuffs
    print 'time elaspsed in this session upto now '+str(T.get_ticks()-tim_var)+' millisecs'

    if(game_ended):
        new_session=1
        #restart_your_new_game by resetting your variables or whatever
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top