내 프로그램의 특정 지점에 실제로 붙어있어 도움을받을 수 있기를 바랍니다.Python Pygame Loop 비정상적인 지연
기본적으로 움직이는 이미지 게임을 만들려고합니다. 이미지는 무작위로 일련의 "상향 점"중 하나에 배치되고 플레이어는 이미지가 새로운 위치에 배치되기 전에 이미지를 명중해야합니다.
모든 것이 잘 될 것 같지만 pygame.tick 또는 python time.sleep()과 함께 이상한 지연이 발생하는 것 같습니다.
저는 파이썬과 파이 게임의 초보자라고 말하고 싶습니다.하지만 내 인생은 잘못 될지 이해할 수 없습니다. 지금까지 나의 이해에서, 이미지는 정규 1s 간격으로 새 위치로 이동해야합니다.
대신 프로그램이 가끔 "멈추거나"지연되는 것처럼 보입니다. 이미지가 꽤 잠시 동안 자리를 비 췄다가 따라 잡으려고하는 것처럼 앞뒤로 달려가는 것처럼 보일 것입니다. 몇 초 동안 (정상 1 초 지연) 정상적으로 작동하는 것으로 작동 한 다음 이동하거나 계속 고생하는 데 다시 돌아갑니다. 내가 time.sleep를 사용하는 경우
# The values are tuples which hold the top-left x, y co-ordinates at which the
# rabbit image is to be blitted...
uppoints = {1: (70, 70), 2: (250, 70), 3: (430, 70), 4: (600, 70),
5: (70, 250), 6: (250, 250), 7: (430, 250), 8: (600, 250),
9: (70, 430), 10: (250, 430), 11: (430, 430), 12: (600, 430)}
# Get a random location to pop up...
def getpos(ups):
x = random.randint(1, 2)
if x == 1:
up = ups[1]
return up
elif x == 2:
up = ups[2]
return up
uppos =()
while gamerunning:
uppos = getpos(uppoints)
for event in pygame.event.get():
if event.type == QUIT:
gamerunning = False
if event.type == pygame.MOUSEMOTION:
mpos = pygame.mouse.get_pos()
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if rabbits.rect.collidepoint(event.pos):
score += 10
mainwin.fill((0, 0, 0))
scoretxt2 = basefont.render(str(score), True, (0, 0, 0))
mainwin.blit(mainback, (0, 0))
mainwin.blit(rabbits.image, uppos)
mainwin.blit(scoretxt, (70, 30))
mainwin.blit(scoretxt2, (160, 32))
mainwin.blit(livestxt, (600, 30))
mainwin.blit(livestxt2, (690, 32))
pygame.display.flip()
time.sleep(1)
# Check which level the user is by score, and increase the speed of the rabbits as needed...
fpsclock.tick(60)
이 게임에서 실행 : 나는 문제를 데 생각하는 곳을 볼 수 있도록 의미 : 것이죠은 루프를 사용하여 코드합니다
희망 1 초 간격으로 블리 팅의 적절한 속도가되는 것 같습니다. 만약 내가 time.sleep()을 사용하고 .tick (60)을 사용한다면, 이미지는 미친 듯이 blit하지만 나는 여전히 어떤 종류의 지연을 볼 수 있다고 확신한다.
나는 약간의 인터넷 검색을 시도하고 파이 게임의 .tick() 메소드와 python sleep() 메소드 모두에 문제가 있음을 알았지 만 이것이 사실인지 알 수없는 몇 페이지를 발견했다.
솔직히 필자는 여기에서 잘못 수행 그래서 당신이 :)
감사 alot을 도울 수 있기를 바랍니다 무슨 생각이 없다!
안녕하십니까, 답장을 보내 주셔서 감사합니다. if ms .. 문장을 시도 할 때, 나는 그 위치 (upos)로 blit 할 수 없다는 에러를 얻었을 때 False로 평가한다고 생각한다. 그래서 나는 그 빈 튜플을 생각한다. else 절을 추가하면 문제가 계속됩니다 ... –
@ user3069267 : 아, 아마도 첫 번째 단계에서 도청 당했을 것입니다. 루프를 시작하기 전에'uppos'를 초기화하거나'1000'에서'ms'를 시작하여 첫 번째 프레임에서 업데이트를 실행하십시오. – Blckknght
놀라운 것들! 도와 줘서 정말 고마워. :) –