2017-08-10 101 views
1

我想在用户点击鼠标左键3秒后显示图像。 这里是我的代码的一部分:如何在一段时间间隔后显示图像?

pic=pygame.image.load('pic.png') 
while True: 
    for event.type==pygame.MOUSEBUTTONDOWN: 
    screen.blit(pic,(100,100)) 

它只显示了一下。我尝试使用forwhile循环,然而,它结束了几秒钟,然后显示一个闪光灯。

我想我也许可以用一个定时器,加三分,就像这样:

for event.type==pygame.MOUSEBUTTONDOWN: 
    #get now time here,and assignment for timeclick 
if timeclick+3s>=timenow: # pseudocode 
    screen.blit(pic,(100,100)) 

我怎么能写这样的代码段?有更好的方法吗?

回答

1

当用户单击鼠标按钮时启动计时器,然后计算主循环中的传递时间,如果它是>= 3,请将图像曝光。

import pygame as pg 


def main(): 
    screen = pg.display.set_mode((640, 480)) 
    clock = pg.time.Clock() 
    font = pg.font.Font(None, 40) 
    img = pg.Surface((100, 100)) 
    img.fill((190, 140, 50)) 
    click_time = 0 
    passed_time = 0 

    done = False 

    while not done: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       done = True 
      # Start the timer. 
      elif event.type == pg.MOUSEBUTTONDOWN: 
       click_time = pg.time.get_ticks() 

     screen.fill((30, 30, 30)) 
     if click_time != 0: # If timer has been started. 
      # Calculate the passed time since the click. 
      passed_time = (pg.time.get_ticks()-click_time)/1000 

     # If 3 seconds have passed, blit the image. 
     if passed_time >= 3: 
      screen.blit(img, (50, 70)) 

     txt = font.render(str(passed_time), True, (80, 150, 200)) 
     screen.blit(txt, (50, 20)) 

     pg.display.flip() 
     clock.tick(30) 


if __name__ == '__main__': 
    pg.init() 
    main() 
    pg.quit() 
+0

首先谢谢你。但是为什么很多人在最后加入sys.exit()?我只使用pygame.quit()。也许它们是相同的。 – Inteyerry

+0

我想我曾经读过一些关闭pygame窗口的系统可能很麻烦,而'sys.exit'可以帮助,但找不到源代码。也许这是过去不再需要的遗留物。我需要调查。 – skrx

+0

感谢您的支持!你也可以[接受答案](https://meta.stackexchange.com/a/5235)给你2个声望点和15个响应者,但你不必这样做。 – skrx

相关问题