首页 > 编程问答 >为什么 .rumble() 没有使我的控制器按照指定的方式振动?

为什么 .rumble() 没有使我的控制器按照指定的方式振动?

时间:2024-07-21 07:20:40浏览次数:15  
标签:python loops pygame controller vibration

如果控制器断开连接,我的 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()

这个代码段中存在一些问题,导致你的控制器没有按预期振动:

  1. 循环内的 feedback.stop_rumble() 你在每次迭代的末尾都调用了 feedback.stop_rumble() 。这会导致振动在指定的 500 毫秒之前停止,因为 time.sleep(5) 会在振动有机会完成之前运行 feedback.stop_rumble()

  2. time.sleep() 和振动持续时间: feedback.rumble(1.0, 1.0, 500) 应该使控制器振动 500 毫秒。但是, time.sleep(5) 会暂停整个循环 5 秒(5000 毫秒),这比振动持续时间长得多。这意味着振动会在暂停期间完成,而你不会注意到控制器再次停止,因为它已经停止了。

  3. 控制器断开连接检查: 你在循环开始之前检查了控制器是否连接,但在循环运行时没有检查。这意味着,如果在循环运行时控制器断开连接,脚本将不会终止,并且你可能会收到错误。

以下是如何解决这些问题的修改后的代码:

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

相关文章

  • Python:如何从 csvreader 列表中删除括号和单引号?
    Pythonn00b在这里。尝试使用csvreader从文件导入数组并打印一个值,但它添加了括号和单引号。这是我的代码:importrandomimportcsvwithopen('crimes.csv','r')ascsvfile:crimes=list(csv.reader(csvfile))hello=["Hello","Greetings","Hi&q......
  • Python 中的多行输入,支持空行并在控制台中检查“\n”
    您好,亲爱的社区,在解决某个竞赛任务时出现了问题。我解决了它,但由于输入棘手而无法交付。我在谷歌上搜索并尝试了几种找到的方法,但如果应用于此任务,它们中的每一种都有一些弱点。而且我无法完全重现所应用的输入,因为它嵌入在竞赛界面中;我可能只依赖描述。这就是为什么我......
  • Python Pandas - 读取 CSV 或 Excel
    我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建数据框。由于我无法预测用户将上传哪种文件类型,因此我将pd.read_csv()和pd.read_excel()包装在try/except块中。ifform.validate_on_submit():input_filename=secure_filename(form.file.da......
  • 如何在 python 脚本中调用 robocopy 来批量复制多个文件夹?
    我正在尝试在网络驱动器之间移动多个大文件夹(>10Gb、>100个子文件夹、>2000个文件)。我尝试过在python中使用Shutil.copytree命令,它工作得很好,只是由于不同的原因它无法复制一小部分(<1%的文件)。我相信robocopy对我来说是最好的选择,因为我可以创建一个记录传输过......
  • 如何在Python中使用装饰器动态创建类方法?
    我正在开发一个Python项目,我需要在运行时动态地为类创建方法。我想使用装饰器根据一些外部配置将这些方法添加到类中。要求是:装饰器应该从外部配置(例如字典)读取方法定义。装饰器应该动态地将这些方法添加到类中。每个生成的方法都应具有配置中指定的自己唯一的实现。以......
  • python 中的可扩展视频文件完整性验证
    我的目录包含约100万个视频文件,嵌套在100个子目录下。我想编写一个python脚本来验证这些文件没有损坏,然后删除损坏的文件。做到这一点最有效的方法是什么?它运行的机器有64个cpu核心。当然,以下是如何在Python中构建可扩展视频文件完整性验证器的步骤,该验证器可以......
  • Python:对很高维的矩阵进行对角化?
    目前我正在研究一个涉及对角化矩阵以获得特征值和特征向量的问题。但现在我想将问题扩展到200,000x200,000的尺寸。我查找了如何将矩阵存储在numpy中,有人建议使用PyTables。看起来很有希望。但我想知道哪里有工具可以帮助对PyTables中的矩阵存储进行对角化。......
  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......
  • 使用 python print 和 gdb 时出现 BrokenPipeError
    我正在尝试在Linux中运行应用程序并使用Python生成输入:python3-c'print(".....")'|./someapp但出现下一个错误:Exceptionignoredin:<_io.TextIOWrappername='<stdout>'mode='w'encoding='utf-8'>BrokenPipeError:......