Pygame操纵杆

时间:2016-03-15 16:51:39

标签: python-2.7 pygame joystick

我有一个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()

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

1 个答案:

答案 0 :(得分: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)。