PyGame Joystick

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 10. März 2008, 18:42

Sephiroth hat geschrieben:Also ich habe mal etwas getestet, und ich glaube, dass wenn ein Spieler gerade eine Eingabe macht(wie nach rechts laufen), werden die Eingaben vom Anderen ignoriert.
Tastaturen können manchmal nicht mehr als drei gleichzeitig gedrückte Tasten verarbeiten. Das merkt man bei einigen Spielen, wenn man zu zweit auf einem Keyboard spielt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Sephiroth
User
Beiträge: 28
Registriert: Freitag 3. November 2006, 00:12

Montag 10. März 2008, 20:15

@mkallas: Die Frage hat mkallas doch schon beantwortet und das sollte doch klar sein, wenn Du mal kurz drüber nachdenkst. Es gibt kein "rechts-oben", sondern nur "rechts" und "oben" und wenn beide jeweils die x- und die y-Richtung beeinflussen, kann nur eines davon "gewinnen". Und das beim Loslassen *irgendeiner* Taste alle Bewegungsrichtungen auf 0 gesetzt werden, ist auch ein wenig bescheuert und erklärt vielleicht warum Du die Steuerung als hakelig empfindest. Rolling Eyes

Wenn Du "oben" drückst, wird x=0 und y=-1 gesetzt, wenn dann noch "rechts" dazu kommt, wird x=1 und y=0 gesetzt, wobei Du den Effekt von "oben" zunichte gemacht hast. Wenn Du jetzt "oben" loslässt bleibt der Spieler stehen (x=0, y=0) obwohl ja immer noch "rechts" gedrückt ist.
Jetzt wo ihr es sagt ist es schon irgendwie einleuchtend. Habe es jetzt mal geändert:

Code: Alles auswählen

        #---Spieler2---
        #S2 hoch
        if eingabe.type == pygame.KEYDOWN and eingabe.key == pygame.K_UP:
                self.spieler2.ymove = -1  
        #S2 runter        
        elif eingabe.type == pygame.KEYDOWN and eingabe.key == pygame.K_DOWN:
                self.spieler2.ymove = 1
        #S2 rechts
        elif eingabe.type == pygame.KEYDOWN and eingabe.key == pygame.K_RIGHT:
                self.spieler2.xmove = 1   
        #S2 links
        elif eingabe.type == pygame.KEYDOWN and eingabe.key == pygame.K_LEFT:
                self.spieler2.xmove = -1             
        #S2 Taste loslassen
        #hoch runter
        elif eingabe.type == pygame.KEYUP and (eingabe.key == pygame.K_UP or pygame.K_DOWN):
                self.spieler2.ymove = 0               
        #rechts links
        elif eingabe.type == pygame.KEYUP and (eingabe.key == pygame.K_RIGHT or pygame.K_LEFT):
                self.spieler2.xmove = 0 
{Bewegungen auf der y-Achse funktionieren super.
Allerdings die auf der x-Achse nicht.
Drücke ich nach links oder rechts, bewegt sich das quadrat die ganze zeit in die Richtung, bis ich die entgegengesetzte Richtungstaste drücke.
Obwohl ich es doch bei beiden gleich gemacht habe.
In der Spieler-klasse wird auch die x und die y Achse gleich behandelt.
Find einfach keinen Unterschied, der erklären könnte wieso es auf der y-achse funktioniert und auf der x-Achse nicht.
}

[EDIT]: Ok, falsche Info. Ich musste einfach beim letzten elif block(Der ob rechts oder links losgelassen wurde) in einen normalen if block umwandeln.
[EDIT2]: Grade noch aufgefallen, dass wenn ein Spieler ne Richtungstaste loslässt, beim anderen egal welche Bewegung auch gestoppt wird.

Muss mir trotzdem nochmal alles durch den Kopf gehen lassen, denn hab immernoch das selbe Problem. Wenn zum rechten tastendruck noch einer nach oben hinzukommt etc.
Tastaturen können manchmal nicht mehr als drei gleichzeitig gedrückte Tasten verarbeiten. Das merkt man bei einigen Spielen, wenn man zu zweit auf einem Keyboard spielt.
Ist das dann ein Hard oder Softwareproblem der Tastatur?

Ps: Ich weiß, dass wahrscheinlich die meisten meiner Frage sehr trivial sind. Hab allerdings erst vor ner Woche mit Python/Pygame angefangen und bin von daher noch nicht so geübt im "Problem erkennen und lösen".
Also danke für euer Verständnis:)

Gruss
Antworten