我似乎真的被困在我的程序中的某個點,並希望你能幫助。Python pygame循環不尋常的延遲
我基本上試圖創建一個簡單的命中移動圖像遊戲。圖像隨機放置在一系列「上升點」之一,然後玩家需要在圖像放置到新位置之前點擊圖像。
一切似乎都很好,但我似乎得到pygame.tick或蟒蛇time.sleep()一個奇怪的延遲。
我只想說我是一個python和pygame的新手,但對於我的生活無法理解哪裏出了問題。從我迄今爲止的理解來看,圖像應定期以1秒的間隔移動到新的位置。
但是相反,程序似乎有時會「掛起」或「延遲」,並且圖像似乎卡住了幾秒鐘,然後彷彿試圖趕上來回奔跑,然後該程序似乎會爲幾秒鐘內看起來好的工作(定期1秒延遲),然後回去努力移動或跟上。
希望這是有道理的:) 她的是與循環的代碼,所以你可以看到我覺得我有問題:
# 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)
如果我用time.sleep,遊戲運行時似乎是以1秒爲間隔的正確傳播速度。如果我省略time.sleep()並使用.tick(60),圖像會快速閃動,但我相信我仍然可以看到某種延遲。
我試着做了一些Google搜索,發現有幾頁說pygame的.tick()方法和python sleep()方法都存在問題,但無法確定這是否爲真。
老實說,我不知道香港專業教育學院做錯了這裏,所以希望你能幫助:)
非常感謝!
嗨謝謝你的回覆,我明白你說2會衝突,謝謝你的幫助。當嘗試if ms ..語句時,我認爲它的評估爲False,因爲我得到無法到達該位置的錯誤(upos),所以我認爲它是一個空元組。如果我添加一個else子句,問題仍然存在...... –
@ user3069267:啊,它可能在第一遍中被竊聽。嘗試在啓動循環之前初始化'uppos',或者在'1000'處啓動'ms',以便在第一幀上運行更新。 – Blckknght
令人驚歎的東西!十分感謝你的幫助 :) –