Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.09.2012, 17:36

Knopfdruck ignorieren im weiteren Spielverlauf

Hi, Community.

Meine Frage beschäftigt sich mit SFML. Habe ein Spiel, das in einer While-Schleife läuft und sich dadurch immer wieder aktualisiert. Jetzt möchte ich, dass beim Drücken einer bestimmten Taste eine Änderung eintritt, sprich ich ändere eine Variable die mir den derzeitigen Status von sagen wir mal "Menü" auf "Spielen" ändert. Die schleife merkt dann durch eine interne if-verzweigung, dass sich die variable geändert hat und springt dann in den entsprechenden if-zweig. Mein Problem: Dieselbe taste, die die veränderung hervorgerufen hat, soll nun im aktuellen if-zweig etwas anderes bewirken. Aber nur, wenn vorher mal kurz die taste losgelassen wird. Durch die while-schleife kann es aber ja passieren, dass der tastendruck im nächsten frame noch als solcher wahrgenommen wird und die änderung tritt ein, ohne dass es der user vielleicht wollte. habt ihr eine lösung für das problem?

Grüße, rabbinator

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

18.09.2012, 17:51

Was ist denn das Problem?
Du hast doch alles schon mit Worten beschrieben. Wo hapert es, das in Code umzusetzen?

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

3

18.09.2012, 18:07

wenn ich das richtig verstanden habe. Speichere einfach den Zustand (gedrückt/nicht gedrückt) in einer bool Variable und auch den Zustand des letzten frames
und so dürfte dein Problem dann eigentlich nicht kommen.

Wenn du jetzt aber auch noch willst, dass die selbe Taste jetzt etwas anderes macht, musst du dir dafür noch eine bool variable nehmen und diese dann immer auf
"los gelassen" setzen und dann nach einer Zeit, wenn die Taste wieder die erste Funktion machen soll, wieder auf einen anderen zustand setzen.

Hoffe du hast das so ungefähr verstanden.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

4

18.09.2012, 18:08

Oder du lässt einfach immer, nachdem die Taste gedrückt wurde einen Countdown von zb 0,5 sek runterlaufen, in dem diese Taste gesperrt ist.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

5

18.09.2012, 18:49

Hi, danke für die Antworten. Ich habs jetzt hinbekommen. Also ich habe eine bool-variable namens Sperre. Diese ist zu Anfang auf false gesetzt. Jetzt prüfe ich, ob der Button gedrückt wird und gleichzeitig, ob die sperre auf false steht. wenn beides gegeben ist, führe die aktion aus, mit der die taste belegt ist. in einem else-if-zweig prüfe ich dann, ob die taste nicht mehr gedrückt ist, wenn das der fall ist, setze die sperre auf false.
Ich weiss nicht wieso ich nicht gleich drauf gekommen bin. dachte vielleicht, dass es "unfein" ist, eine hilfs-bool-variable einzusetzen und wollte es etwas smarter lösen. Tja, aber so gehts. ^^

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

6

18.09.2012, 19:17

ja, ich finde sowas auch immer nit so schön, vorallem wenn es dann ein bissl größer wird.
Aber ich kenne keine andere möglichkeit, vll weiß ja noch jemand andres was besseres.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

18.09.2012, 19:21

Typische Anwendung für einen Zustandsautomaten. :)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

8

18.09.2012, 19:22

jo, dat stimmt, hab ich aber selbst noch nit benutzt.
Steht Artikel in der WIki drinn
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

9

18.09.2012, 19:45

Der Wikiartikel ist Mist, zumindest der Code (C++), besser selbst schreiben.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

19.09.2012, 12:29

Diese Probleme mit Tastenabfragen kommen vermutlich in so gut wie jedem Spiel auf. Entweder benutzt du eine Bibliothek die dir die Arbeit abnimmt wie zum Beispiel OID, oder du schreibst dir selbst was. An sich würde ja eine kleine Klasse reichen, die sich den Zustand der Tastatur speichert und jeden Frame geupdatet wird.
Für dein anderes Problem verweise ich auf BlueCobolds Beitrag. Ein Zustandsautomat ist dafür die standard Lösung. Am einfachsten wäre es, wenn du dir dafür mal eine Testanwendung schreibst. Versuch deine Zustände mal mit if und else abzubilden. Danach versuchst du es mal mit Switch. Und danach schreibst du dir einen Zustandsautomaten. Vielleicht kennst du das schon von GameStates. Das ist vermutlich für viele Spieleentwickler das erste mal, dass sie damit in Berührung kommen. Wikipedia hat dazu einen ganz netten Artikel. Ist ohne Code, also musst du deinen Kopf ein bisschen anstrengen, aber das sollte zu schaffen sein. Ansonsten könnte zu dem Thema ja auch ein Thread erstellt werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige