Pygame Joystick: Was mache ich fals?

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

Pygame Joystick: Was mache ich fals?

Beitragvon badoli » Dienstag 15. Juli 2008, 09:48

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

Beitragvon BlackJack » Dienstag 15. Juli 2008, 11:15

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:

Beitragvon badoli » Dienstag 15. Juli 2008, 11:29

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder