Seite 1 von 1

Pygame Joystick: Was mache ich fals?

Verfasst: Dienstag 15. Juli 2008, 09:48
von badoli
Hallo an alle, bin neu hier. Ich versuche gerade mein Gamepad mittels PyGame anzusprechen. Es wird zwar korrekt mit allen Achsen und Buttons erkannt, aber es liefert keine Werte bzw. nur 0.0 für Achsen wie für Buttons... was mache ich falsch?

Lg
Oliver

Code: Alles auswählen

import pygame
import time

pygame.init()
jCount=pygame.joystick.get_count()

joy=[]

for x in range(jCount):
	joy.append(pygame.joystick.Joystick(x))
	joy[x].init()
	
while True:
	tempString=""
	for x in range(jCount):
		tempString=tempString+("Count: "+str(jCount)+" Axis0: "+str(joy[x].get_axis(0))+" Axis1: "+str(joy[x].get_axis(1))+" Button0: "+str(joy[x].get_button(0)))
	print(tempString)
	time.sleep(1)

Verfasst: Dienstag 15. Juli 2008, 11:15
von BlackJack
Du musst die Joysticks entweder über die Event-Schleife abfragen, oder selber dafür sorgen, dass die Werte von der Hardware abgefragt werden: `pygame.event.pump()`. Steht bei mir gleich im zweiten Absatz in der Pygame-Dokumentation unter `Joystick`.

Anmerkungen zum Quelltext: Statt `range()` besser `xrange()` verwenden, wenn man nicht wirklich eine Liste mit Zahlen benötigt.

In der zweiten ``for``-Schleife wäre es "pythonischer" gleich über die Objekte in der Liste zu iterieren, statt den Umweg über den Index zu gehen.

``print`` ist (noch) keine Funktion, die Klammern sind also überflüssig bis irreführend.

`tempString` ist überflüssig, da kann man auch gleich in der Schleife das ``print`` platzieren. Und Zeichenkettenformatierung verwenden, anstelle des umständlichen und (IMHO) unübersichtlicheren Verkettens von Zeichenketten.

Nach dem Style Guide sollten die Namen statt `jCount` und `tempString` `j_count` und `temp_string` heissen.

Ungetestet:

Code: Alles auswählen

import time
import pygame

def main():
    pygame.init()
    
    joysticks = list()
    for i in xrange(pygame.joystick.get_count()):
        joystick = pygame.joystick.Joystick(i)
        joystick.init()
        joysticks.append(joystick)
    
    while True:
        pygame.event.pump()
        for joystick in joysticks:
            print ('Count: %d Axis0: %s Axis1: %s Button0: %s'
                   % (len(joysticks),
                      joystick.get_axis(0),
                      joystick.get_axis(1),
                      joystick.get_button(0)))
        time.sleep(1)

Verfasst: Dienstag 15. Juli 2008, 11:29
von badoli
Okay, mein Fehler, hab den Event Teil nicht ordentlich gelesen (bzw. verstanden). Danke!