如果控制器断开连接,我的 Python 脚本(在 for 循环中激活 PlayStation 4 控制器的振动)应该终止。但是,当我将持续时间参数传递给 rumble 方法时,它不会按照指定的方式振动。此外,当 for 循环处于活动状态时,它会继续振动而不会中断。 PyGame 文档
joystick_count = pygame.joystick.get_count()
if joystick_count == 0:
print("No PS4 DualShock controller found. Please connect it.")
return
# Initialize the first joystick (index 0)
feedback= pygame.joystick.Joystick(0)
feedback.init()
iterations = 3 # Number of iterations for the loop
for i in range(iterations):
current_time = datetime.now().strftime("%H:%M:%S")
feedback.rumble(1.0,1.0, 500)
print(f"RUMBLE - Iteration {i + 1} - Current time: "+(current_time)
time.sleep(5) # Pause for 5 seconds
feedback.stop_rumble()
这个代码段中存在一些问题,导致你的控制器没有按预期振动:
-
循环内的
feedback.stop_rumble()
: 你在每次迭代的末尾都调用了feedback.stop_rumble()
。这会导致振动在指定的 500 毫秒之前停止,因为time.sleep(5)
会在振动有机会完成之前运行feedback.stop_rumble()
。 -
time.sleep()
和振动持续时间:feedback.rumble(1.0, 1.0, 500)
应该使控制器振动 500 毫秒。但是,time.sleep(5)
会暂停整个循环 5 秒(5000 毫秒),这比振动持续时间长得多。这意味着振动会在暂停期间完成,而你不会注意到控制器再次停止,因为它已经停止了。 -
控制器断开连接检查: 你在循环开始之前检查了控制器是否连接,但在循环运行时没有检查。这意味着,如果在循环运行时控制器断开连接,脚本将不会终止,并且你可能会收到错误。
以下是如何解决这些问题的修改后的代码:
import pygame
import time
from datetime import datetime
pygame.init()
pygame.joystick.init()
joystick_count = pygame.joystick.get_count()
if joystick_count == 0:
print("No PS4 DualShock controller found. Please connect it.")
return
# Initialize the first joystick (index 0)
feedback = pygame.joystick.Joystick(0)
feedback.init()
iterations = 3 # Number of iterations for the loop
for i in range(iterations):
# 检查循环中每次迭代的连接
if pygame.joystick.get_count() == 0:
print("Controller disconnected. Exiting.")
break
current_time = datetime.now().strftime("%H:%M:%S")
print(f"RUMBLE - Iteration {i + 1} - Current time: " + (current_time))
feedback.rumble(1.0, 1.0, 500) # 振动 500 毫秒
time.sleep(0.5) # 等待振动结束
# 无需在此处调用 feedback.stop_rumble(),因为它会自动在 500 毫秒后停止
pygame.quit()
在此修改后的代码中:
-
我们从循环中删除了
feedback.stop_rumble()
,因为振动会在指定的持续时间后自动停止。 -
我们将
time.sleep()
缩短为 0.5 秒,以便在每次振动完成后暂停。 - 我们在循环的每次迭代中添加了一个检查,以查看控制器是否仍然连接。如果是,脚本将终止。
使用这些更改,你的控制器现在应该按照预期振动,并且脚本将在控制器断开连接时正确退出。
标签:python,loops,pygame,controller,vibration From: 78771359