python – 在pygame中每隔x(毫秒)做一些事情
|
我正在学习
Python和Pygame,而我正在做的第一件事是一个简单的Snake游戏.我试图让蛇每0.25秒移动一次.这是我的代码循环的一部分:
while True:
check_for_quit()
clear_screen()
draw_snake()
draw_food()
check_for_direction_change()
move_snake() #How do I make it so that this loop runs at normal speed,but move_snake() only executes once every 0.25 seconds?
pygame.display.update()
我希望所有其他函数正常运行,但move_snake()只发生一次0.25秒.我查了一下并找到了一些答案,但对于那些制作他们的第一个Python脚本的人来说,它们看起来都太复杂了. 是否有可能真正得到我的代码应该是什么样子的例子,而不仅仅是告诉我需要使用哪个函数?谢谢! 解决方法
有几种方法,如跟踪系统时间或使用时钟和计数滴答.
但最简单的方法是使用事件队列并使用
这是一个小的,运行的例子,蛇每250毫秒移动一次: import pygame
pygame.init()
screen = pygame.display.set_mode((300,300))
player,dir,size = pygame.Rect(100,100,20,20),(0,0),20
MOVEEVENT,t,trail = pygame.USEREVENT+1,250,[]
pygame.time.set_timer(MOVEEVENT,t)
while True:
keys = pygame.key.get_pressed()
if keys[pygame.K_w]: dir = 0,-1
if keys[pygame.K_a]: dir = -1,0
if keys[pygame.K_s]: dir = 0,1
if keys[pygame.K_d]: dir = 1,0
if pygame.event.get(pygame.QUIT): break
for e in pygame.event.get():
if e.type == MOVEEVENT: # is called every 't' milliseconds
trail.append(player.inflate((-10,-10)))
trail = trail[-5:]
player.move_ip(*[v*size for v in dir])
screen.fill((0,120,0))
for t in trail:
pygame.draw.rect(screen,(255,t)
pygame.draw.rect(screen,player)
pygame.display.flip()
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
