你如何通过按下游戏手柄按钮(用户输入)来打破 while 循环
How do you break out of while loop by pressing a gamepad button (User Input)
我使用 pygame 只是为了在我的脚本中使用 xbox 控制器。我的目标是按下一个按钮开始重复任务,然后能够按下另一个按钮来中断重复任务。然后我应该可以按原来的按钮来恢复任务。
在我 post 代码之前,我知道问题的症结在于这一部分:(我的缩进有问题,但代码有效)。
while True:
schedule.run_pending()
time.sleep(1)
我如何打破这个 while 循环,以便我可以使用下一个按钮 JOYHATMOTION:
基本上我会使用 JOYHATMOTION
来暂停 job
功能。
这是代码。它每 5 秒打印一次“Hello World”,持续 200 秒。
import schedule
from datetime import datetime, timedelta, time
import time
import sys
import pygame
from pygame.locals import *
pygame.init()
def job():
print('Hello World')
pygame.joystick.init()
joysticks = [pygame.joystick.Joystick(i) for i in range(pygame.joystick.get_count())]
for joystick in joysticks:
print(joystick.get_name())
while True:
for event in pygame.event.get():
if event.type == JOYBUTTONDOWN:
print(event)
if event.button == 8:
schedule.every(5).seconds.until(timedelta(seconds=200)).do(job)
while True:
schedule.run_pending()
time.sleep(1)
if event.type == JOYHATMOTION:
if event.value[0] == 1:
print(event)
if event.value[0] == -1:
print(event)
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
我试过:
while True:
if event.type == JOYHATMOTION:
if event.value[0] == 1:
break
else:
schedule.run_pending()
time.sleep(1)
但是这个剂量似乎有效。提前谢谢你。
切勿尝试在应用程序循环中使用循环来控制应用程序。使用应用程序循环。应用程序循环不断执行。使用指示应用程序当前状态的 game_state
变量。根据变量的状态执行应用程序中的代码。
使用这种方法,您可以轻松地在按下另一个键时更改状态。
game_state = ""
run = True
while run:
for event in pygame.event.get():
if event.type == QUIT:
run = False
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
run = False
if event.type == JOYBUTTONDOWN:
print(event)
if event.button == 8:
if game_state == "schedule":
game_state = "" # schedule off
else:
game_state = "schedule" # schedule on
schedule.every(5).seconds.until(timedelta(seconds=200)).do(job)
if event.type == JOYHATMOTION:
if event.value[0] == 1:
print(event)
if event.value[0] == -1:
print(event)
if game_state == "schedule":
schedule.run_pending()
# [...]
pygame.quit()
sys.exit()
我使用 pygame 只是为了在我的脚本中使用 xbox 控制器。我的目标是按下一个按钮开始重复任务,然后能够按下另一个按钮来中断重复任务。然后我应该可以按原来的按钮来恢复任务。
在我 post 代码之前,我知道问题的症结在于这一部分:(我的缩进有问题,但代码有效)。
while True:
schedule.run_pending()
time.sleep(1)
我如何打破这个 while 循环,以便我可以使用下一个按钮 JOYHATMOTION:
基本上我会使用 JOYHATMOTION
来暂停 job
功能。
这是代码。它每 5 秒打印一次“Hello World”,持续 200 秒。
import schedule
from datetime import datetime, timedelta, time
import time
import sys
import pygame
from pygame.locals import *
pygame.init()
def job():
print('Hello World')
pygame.joystick.init()
joysticks = [pygame.joystick.Joystick(i) for i in range(pygame.joystick.get_count())]
for joystick in joysticks:
print(joystick.get_name())
while True:
for event in pygame.event.get():
if event.type == JOYBUTTONDOWN:
print(event)
if event.button == 8:
schedule.every(5).seconds.until(timedelta(seconds=200)).do(job)
while True:
schedule.run_pending()
time.sleep(1)
if event.type == JOYHATMOTION:
if event.value[0] == 1:
print(event)
if event.value[0] == -1:
print(event)
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
我试过:
while True:
if event.type == JOYHATMOTION:
if event.value[0] == 1:
break
else:
schedule.run_pending()
time.sleep(1)
但是这个剂量似乎有效。提前谢谢你。
切勿尝试在应用程序循环中使用循环来控制应用程序。使用应用程序循环。应用程序循环不断执行。使用指示应用程序当前状态的 game_state
变量。根据变量的状态执行应用程序中的代码。
使用这种方法,您可以轻松地在按下另一个键时更改状态。
game_state = ""
run = True
while run:
for event in pygame.event.get():
if event.type == QUIT:
run = False
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
run = False
if event.type == JOYBUTTONDOWN:
print(event)
if event.button == 8:
if game_state == "schedule":
game_state = "" # schedule off
else:
game_state = "schedule" # schedule on
schedule.every(5).seconds.until(timedelta(seconds=200)).do(job)
if event.type == JOYHATMOTION:
if event.value[0] == 1:
print(event)
if event.value[0] == -1:
print(event)
if game_state == "schedule":
schedule.run_pending()
# [...]
pygame.quit()
sys.exit()