【问题标题】:Pygame joystickPygame 操纵杆
【发布时间】:2016-03-15 16:51:39
【问题描述】:

我有一个 SPEEDLINK 游戏手柄,想查看游戏手柄中的移动结果。我是这样写的:

import pygame
from pygame.locals import *
import random
pygame.init()

TV=pygame.display.set_mode((500,500))

joystick_count = pygame.joystick.get_count()
if joystick_count == 0:
    # No joysticks!
    print("Error, I didn't find any joysticks.")
else:
    # Use joystick #0 and initialize it
    my_joystick = pygame.joystick.Joystick(0)
    my_joystick.init()


x,y=400,400

pygame.draw.circle(TV,(100,200,40),(x,y),10)
pygame.display.flip()

my_joystick = pygame.joystick.Joystick(0)
clock=pygame.time.Clock()
my_joystick.init()

done=False

print pygame.joystick.get_count()

while not done:
     for e in pygame.event.get():
        if e.type==QUIT:
            done=True
        elif e.type==JOYBUTTONUP:
            x=my_joystick.get_axis(0)
            y=my_joystick.get_axis(1)
            print x,y

    clock.tick(60)

pygame.quit()

但是当我移动帽子时,在帽子右边它给了我 0.999969482422 0.0 而不是 1 0,同样在帽子下我得到 0.0 0.999969482422 而不是 0 1。为什么会这样?我怎样才能像其他职位一样在这些地方获得 ONE?

【问题讨论】:

  • 所以我可以用另一个操纵杆获得 1,你的意思是?
  • 0.999969482422 与 1.0 相同 你永远不会有游戏在这些值之间产生差异。

标签: python-2.7 pygame joystick


【解决方案1】:

浮点运算本质上是不精确的,并且很可能通过对浮点的某种转换将传感器输入映射到 0~1。我非常怀疑您的游戏手柄是否足够灵敏,以至于0.999969482422 与 1 有显着差异,因为使用 Python 计算时的差异是0.000030517577999988887,大约是 3/100000。即使您的游戏手柄的模拟摇杆具有很好的传感器分辨率,您也不太可能使用任何操纵杆获得准确的 1。对浮点运算使用精确相等是一个坏主意,甚至模糊比较也可能很棘手(如果您可以阅读大量数学,请参阅https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/)。如果您确实需要钳制到 1,您也可以四舍五入(例如 round(0.999969482422, 4) == 1.0)。

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多