如何在游戏(Python)中使用2个控制器

时间:2019-05-08 14:12:30

标签: python controller pygame

我们想用Python(有点像Street Fighter)来创建一个有2个玩家和2个控制器的游戏。我们有一个问题,我们不知道如何分离这两个控制器。

当我们使用1个控制器移动或攻击1个角色时,另一个角色也在移动。

这是代码:

def usecontroller():   
    pygame.init()
    global instanceFenetrePause
    for i in range(0,pygame.joystick.get_count()):
        vr.listeJoysticks.append(pygame.joystick.Joystick(i))
        vr.listeJoysticks[-1].init() 

    while vr.loopGestionClavier :
        for event in pygame.event.get():
            if event.type == pygame.QUIT :
                instanceFenetrePause.affichage_fenetre()
            if vr.loopJeu :
                for x in range(0,len(vr.listeJoysticks)) :
                    if event.type == pygame.JOYBUTTONDOWN :
                        if event.button == 0 :
                            print ('command0')
                        if event.button == 1 :
                            print ('command1')
                        if event.button == 2 :
                            print ('command2')
                        if event.button == 3 :
                            print ('command3')
                        if event.button == 4 :
                            print ('command4')
                        if event.button == 5 :
                            print ('command5')
                        if event.button == 7 :
                            instanceFenetrePause.affichage_fenetre()

1 个答案:

答案 0 :(得分:0)

documentation的快速浏览显示,所有操纵杆事件都包含一个属性event.joy,该属性应引用创建该事件的操纵杆。然后,只需使用if语句或其他控制逻辑来确定应该移动哪个字符。我对pygame不够熟悉,无法知道event.joy的值是什么,但我怀疑它的数值索引将与传递给pygame.joystick.Joystick的数值索引相同。

例如,使用上面的代码:

if event.type == pygame.JOYBUTTONDOWN :
    if event.button == 0 :
        if event.joy == 0:
            print('player 1, command0')
        elif event.joy == 1:
            print('player 2, command0')

    if event.button == 1 :
        if event.joy == 0:
            print('player 1, command1')
        elif event.joy == 1:
            print('player 2, command1')
        print ('command1')

当然可能需要修改此值以处理任意操纵杆索引,但是想法就在那里。