Joystik - Tastenkombinationen in Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
PJanow4711
User
Beiträge: 4
Registriert: Dienstag 27. Juni 2017, 06:34

Dienstag 27. Juni 2017, 09:57

Habe ein Programm geschrieben wo ich mit mit dem PS4 Controller beim Tastendruck etwas anstossen kann. Das Programm funktioniert Super!

Jetzt wollte ich aber noch zusätzlich Funktionen in das Programm intergrieren, dass auch Tastenkombinationen funktionieren Z.B Tastenkombinationen L1 + X oder R1 + O sollen etwas anstossen. Hier stehe ich aber etwas auf dem Schlauch :K

Habe mir überlegt, dass ich eine zusätzlich Schleife einbauen kann, wenn L1 gedrückt wird. Diese soll durchlaufen werden bis L1 wieder losgelassen wird. Der Code funktioniert aber nicht so richtig. Die Schleife wird verlassen aber hierzu muss ich L1 ein paar mal drücken und die anderen Buttons inerhalb der Schleife funktionieren auch nicht.

Wenn die Schleife einmal verlassen wird, dann funktioniert nichts mehr! Was mache ich falsch ... danke!

Code: Alles auswählen

# -------- Main Program Loop -----------
while done==False:
# EVENT PROCESSING STEP
    	for event in pygame.event.get(): # User did something
        		if event.type == pygame.QUIT: # If user clicked close
			done=True 
		
         if event.type == pygame.JOYBUTTONDOWN and event.button == 4:
			#Schleife solange L1 wieder losgelassen wird  
			   While L1==False:
				   for event in pygame.event.get(): # User did something
        				      If event.type == pygame.JOYBUTTONUP and event.button ==4:
				          	      L1=True #Schleife wieder verlasen wenn L1 losgelassen wird
				              #ansonsten werden die restlichen buttons abgefragt L1 + X, etc.
				              If event.type == pygame.JOYBUTTONDWN and event.button ==0:
					                             ……
			                 If event.type == pygame.JOYBUTTONDWN and event.button ==1:
					                             ……
                          If event.type == pygame.JOYBUTTONDWN and event.button ==2:
					                             ……
                          If event.type == pygame.JOYBUTTONDWN and event.button ==3:
					                             ……
Zuletzt geändert von Anonymous am Dienstag 27. Juni 2017, 10:41, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Dienstag 27. Juni 2017, 10:50

@PJanow4711: In der Eventschleife macht man üblicherweise nichts ausser irgendwelchen Zustand zu aktualisieren auf den man dann *nach* dieser Schleife dann reagiert. Also zum Beispiel vermerken welche Joystick-Knöpfe gerade gedrückt sind und welche nicht. Danach kann man dann *nach* der Schleife entscheiden was bei welcher Kombination dann tatsächlich gemacht werden soll.

Wahrheitswerte mit literalen Wahrheitswerten vergleichen ist übrigens überflüssig und manchmal sogar schädlich wenn jemand darauf vertraut das auch andere Werte in Bedingungen als „wahr“ und „unwahr“ angesehen werden können. Die äusserste Schleife würde man beispielsweise als ``while not done:`` ausdrücken.
PJanow4711
User
Beiträge: 4
Registriert: Dienstag 27. Juni 2017, 06:34

Dienstag 27. Juni 2017, 11:25

Danke erst einmal für die Informationen! Leider bin ich mit Python noch nicht sehr vertraut!

Was bedeutet „nach“ dieser Schleife? Es ist doch die Hauptschleife und ich komme aus dieser Schleife nur mit einem QUIT raus.
Danach kommt doch nichts mehr … oder mache ich hier ein Gedankenfehler?

Event Button kann ja immer nur einen Wert zurückliefern aber wie frage ich es ab wenn ich sehen will daß zwei Tasten gleichzeitig gedruckt sind Zum Beispiel (L1 und X)
BlackJack

Dienstag 27. Juni 2017, 11:50

@PJanow4711: Ich meine nach der ``for``-Schleife. Die Hauptschleife ist ja die ``while``-Schleife.

In der ``for``-Schleife merkst Du Dir welche Tasten gedrückt oder losgelassen wurden, und nach der Schleife kannst die aktuellen Zustände dann auswerten, beispielsweise mit ``if l1_down and x_down:`` falls `l1_down` und `x_down` die Variablen sind die entsprechend auf `True` oder `False` gesetzt werden in der ``for``-Schleife.
Benutzeravatar
Kebap
User
Beiträge: 397
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Dienstag 27. Juni 2017, 12:10

Hallo PJanow4711, willkommen im Forum!

Vielleicht zeigst du mal dein lauffähiges Programm, damit andere auch testen können.

Warum die anderen Buttons nicht funktionieren: Du schreibst JOYBUTTONDWN - ohne o :)
MorgenGrauen: 1 Welt, >12 Gilden, >85 Abenteuer, >1000 Waffen und Rüstungen,
>2500 NPC, >16000 Räume, >170 freiwillige Programmierer, einfach Text, seit 1992.
PJanow4711
User
Beiträge: 4
Registriert: Dienstag 27. Juni 2017, 06:34

Dienstag 27. Juni 2017, 13:18

Langsam verstehe ich es :D

Das Lauffähige programm habe ich auf meinem Raspi. Ich werde es mal zu kontrolle hier reinstellen wenn ich die Änderungen vorgenommen habe!

Viele Grüße und danke noch einmal,
Peter
Antworten