Pygame Joystick: Was mache ich fals?

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
badoli
User
Beiträge: 2
Registriert: Dienstag 15. Juli 2008, 09:41
Wohnort: Wien, Österreich
Kontaktdaten:

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)
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)
badoli
User
Beiträge: 2
Registriert: Dienstag 15. Juli 2008, 09:41
Wohnort: Wien, Österreich
Kontaktdaten:

Okay, mein Fehler, hab den Event Teil nicht ordentlich gelesen (bzw. verstanden). Danke!
Antworten