2012-11-24 17 views
2

我有一個USB控制器,我已將其映射爲鍵盤上的遊戲程序之外的USB控制器(例如,您可以將其用作鍵盤上的常規箭頭鍵)。我使用程序ControlMK做了這個。我的Pygame程序不會將控制器識別爲鍵盤。當我嘗試使用Joystick模塊時,程序無法正常工作。USB控制器將無法在Pygame中工作

這裏是我的代碼:

import pygame, sys, time, random 
from pygame.locals import * 

# set up pygame 
try: 
    pygame.init() 
    pygame.display.init() 
    pygame.mixer.init(size=8, buffer=2048) 

    pygame.mixer.get_init 

except: 
    print "error in init\n" 

white=(255,255,255) 

screen=pygame.display.set_mode((800,600), pygame.RESIZABLE) 

class Loadsound: 

    def __init__(self, name, key, sound_file): 
     self.name = name 
     self.name=key 
     self.sound = pygame.mixer.Sound(sound_file) 

sound_left=[] 
sound_left.append(Loadsound("left","K_LEFT", "left.wav")) 
sound_right=[] 
sound_right.append(Loadsound("right","K_RIGHT", "right.wav")) 
sound_up=[] 
sound_up.append(Loadsound("up","K_UP","up.wav")) 
sound_down=[] 
sound_down.append(Loadsound("down","K_DOWN","down.wav")) 


while True: 
    for i in pygame.event.get(): 
    if i.type==QUIT: 
    exit() 
    pressed=pygame.key.get_pressed() 


    if pressed[K_LEFT]: 
     for left in sound_left: 
      left.sound.play() 
    elif pressed[K_RIGHT]: 
     for right in sound_right: 
      right.sound.play() 
    elif pressed[K_UP]: 
     for up in sound_up: 
      up.sound.play() 
    elif pressed[K_DOWN]: 
     for down in sound_down: 
      down.sound.play() 

感謝您的幫助!

編輯:

我一直在嘗試使用遊戲杆模塊。下面是我在那裏採取的示例代碼:

http://www.pygame.org/wiki/Joystick_analyzer

我修改了代碼,包括它的一些,但它仍然無法正常工作。這裏是我編輯的代碼:

import pygame, sys, time, random 
from pygame.locals import * 
from pygame import * 

# set up pygame 
try: 
    pygame.init() 
    pygame.display.init() 
    pygame.mixer.init(size=8, buffer=2048) 

    pygame.mixer.get_init 

except: 
    print "error in init\n" 

white=(255,255,255) 

screen=pygame.display.set_mode((800,600), pygame.RESIZABLE) 

class Loadsound: 

    def __init__(self, name, key, sound_file): 
     self.name = name 
     self.name=key 
     self.sound = pygame.mixer.Sound(sound_file) 

sound_left=[] 
sound_left.append(Loadsound("left","K_LEFT", "left.wav")) 
sound_right=[] 
sound_right.append(Loadsound("right","K_RIGHT", "right.wav")) 
sound_up=[] 
sound_up.append(Loadsound("up","K_UP","up.wav")) 
sound_down=[] 
sound_down.append(Loadsound("down","K_DOWN","down.wav")) 

def __init__(self): 
    pygame.joystick.init() 
    self.my_joystick = None 
    self.joystick_names = [] 

    for i in range(0, pygame.joystick.get_count()): 
     self.joystick_names.append(pygame.joystick.Joystick(i).get_name()) 

    print self.joystick_names 

    if (len(self.joystick_names) > 0): 
     self.my_joystick = pygame.joystick.Joystick(0) 
     self.my_joystick.init() 

    #max_joy = max(self.my_joystick.get_numaxes(), self.my_joystick.get_numbuttons(), self.my_joystick.get_numhats() 

while True: 
    for i in pygame.event.get(): 
     pygame.event.pump() 
    if i.type==QUIT: 
     exit() 
    #pygame.joystick.Joystick(0) 
    #Joystick.init() 
    pressed=pygame.key.get_pressed() 
    #pressed_j=Joystick.get_hat() 
    def check_hat(self, p_hat): 
     if (self.my_joystick): 
      if (p_hat,self.my_joystick.get_numhats()): 
       return self.my_joystick.get_hat(p_hat) 

     return (0, 0) 



    if check_hat==(-1,0): 
    #if pressed[K_LEFT]: 
     for left in sound_left: 
      left.sound.play() 
    elif pressed[K_RIGHT]: 
     for right in sound_right: 
      right.sound.play() 
    elif pressed[K_UP]: 
     for up in sound_up: 
      up.sound.play() 
    elif pressed[K_DOWN]: 
     for down in sound_down: 
      down.sound.play() 

爲了清楚起見,我的代碼在使用鍵盤時工作。但是,它不會轉換爲映射到相同鍵的控制器。

+0

是否與普通鍵盤按鍵的工作方案? – jsbueno

+0

您可以嘗試在您的主循環中添加一個'pygame.event.pump()'調用 – jsbueno

回答

1

你需要使用Pygame中的Joystick module,或者類似的東西,它有方法的,如:Joystick.get_init(),如果操縱桿在pygame的初始化它講述和Joystick.get_axis(axis_number)返回操縱桿的位置,作爲一個浮球,沿給定軸axis_number。 ControlMK可能會將遊戲杆映射到關鍵輸入的級別太高,以與Pygame進行交互,儘管可能有某種方式可以改變它,但其文檔似乎有限。

+0

我一直在嘗試使用Joystick模塊,但它不起作用。我試着在pygame網站上關於它的教程,但其中的代碼不起作用。這裏是我正在查看的代碼的鏈接: http://www.pygame.org/wiki/Joystick_analyzer 不幸的是,它給了我語法錯誤。我嘗試實現它的一部分,這些部分在我的代碼中沒有充斥着語法,但它仍然不起作用。我將編輯我的原始文章以包含此新代碼。 – user1848006

+0

好吧,這將是交互式幫助,你應該選擇接受它: 1)插入你的USB遊戲杆 2)啓動python解釋器(只需在linux/Mac終端輸入「python」,或者在3)鍵入'pygame' 4)鍵入'pygame.joystick.init()' 5)鍵入'joystick.get_numaxes'它應該告訴我們哪些「數字」軸被分配了 6)hold操縱桿對角線併爲每個軸鍵入'Joystick.get_axis(axis_number)',同時保持它 如果每個軸都返回0,那很糟糕,我們將不得不排除故障。否則... – rofls

+0

那麼,我開始試圖做到這一點,並出現同樣的問題。它抱怨遊戲杆的名字沒有被定義。 – user1848006

0

試試這個:

import pygame 

pygame.init() 
print "Joystics: ", pygame.joystick.get_count() 
my_joystick = pygame.joystick.Joystick(0) 
my_joystick.init() 
clock = pygame.time.Clock() 

while 1: 
    for event in pygame.event.get(): 
     print my_joystick.get_axis(0), my_joystick.get_axis(1) 
     clock.tick(40) 

pygame.quit() 
相關問題