【发布时间】:2020-02-15 11:10:34
【问题描述】:
如果玩家在一定时间内没有移动,我会尝试执行一个动作。
我尝试过这样的事情:
while True:
dt = self.clock.tick(30)
time_since_last_action += dt
moved = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
moved = True
if event.key == pygame.K_LEFT:
player_position -= player_size
elif event.key == pygame.K_RIGHT:
player_position += player_size
if time_since_last_action > 1000 and not moved:
#----action----
time_since_last_action = 0
它不起作用,我明白为什么,但我不知道如何编写我想要的代码。查看我的代码应该是什么样子的示例将非常有帮助。谢谢!
【问题讨论】:
-
为什么它不起作用?解释一下。我们无法运行代码来查看它。 (PL: Wyjaśnij to)
-
也许你应该在
while True之前设置moved = False,然后在你更改player_position时设置moved = True。您还可以添加变量do_something = True/False以查看它是否必须在其他循环中执行某些操作。 -
动作每隔一秒执行一次,我是否移动并不重要。在我看来,这是因为 while 循环执行得非常快,而且从技术上讲,“移动”总是 False。我试图在while循环之前放置moved = False,并在我改变位置时设置为True,但它只工作一次。第一次移动后,它不再起作用(移动 = True,因此不会执行操作)。
-
当您按下按钮时,只会创建一个事件
KEYDOWN- 当您按住按钮时它不会创建事件。您必须设置速度,而不是更改位置,否则您必须检查pygame.pygame.key.get_pressed()[K_LEFT]而不是事件才能在每个循环中获取此值。