2012-11-24 4 views
2

게임 컨트롤러가 아닌 키보드의 화살표 키로 매핑 된 USB 컨트롤러가 있습니다 (키보드의 일반적인 화살표 키로 사용할 수 있음). ControlMK 프로그램을 사용하여이 작업을 수행했습니다. 내 파이 게임 프로그램이 컨트롤러를 키보드로 인식하지 못합니다. 조이스틱 모듈을 사용하려고하면 프로그램이 제대로 작동하지 않습니다.USB 컨트롤러가 파이 게임에서 작동하지 않습니다

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

당신은 파이 게임의 Joystick module, 또는 방법의 등이 비슷한, 사용해야합니다 : 주어진 함께 float로서, 조이스틱은 파이 게임에서 초기화되는 경우 알려줍니다 Joystick.get_init(), 그리고 조이스틱의 위치를 ​​반환 Joystick.get_axis(axis_number)을 축 axis_number. ControlMK는 조이스틱을 Pygame과 상호 작용할 수있는 너무 높은 수준의 주요 입력에 매핑 할 가능성이 높습니다.하지만 Pygame을 변경하는 방법이있을 수 있습니다. 설명서가 제한적으로 보입니다.

+0

조이스틱 모듈을 사용하려했지만 작동하지 않습니다. 나는 pygame 웹 사이트에 관한 튜토리얼을 따르려고했지만 코드는 작동하지 않는다. 다음은 내가보고있는 코드에 대한 링크입니다. http://www.pygame.org/wiki/Joystick_analyzer 불행히도 구문 오류가 발생합니다. 내 코드에서 구문으로 가득 차 있지 않은 부분을 구현하려고 시도했지만 여전히 작동하지 않습니다. 이 새 코드를 포함하도록 원래 게시물을 편집합니다. – user1848006

+0

ok, 대화식 도움말이 될 것입니다. 동의 하시겠습니까? 1) USB 조이스틱을 끼워 넣으십시오. 2) 파이썬 인터프리터를 시작하십시오 (linux/Mac 터미널에'python'을 입력하십시오. windows CMD) 3)'import 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() 
관련 문제